【问题标题】:AngularJS filter fuzzy searchAngularJS过滤模糊搜索
【发布时间】:2016-10-20 17:04:50
【问题描述】:

我的控制器中有一个过滤器,如下所示:

$scope.LegEntQueue = $filter('filter')(legEncoderQueue, {FileAppCD: 'ENT'}).length;

我根据一个名为 FileAppCD 的属性来计算一个名为 legEncoderQueue 的数组的结果(如果它的值为 ENT

这很好用,但是有没有办法让它模糊搜索并选择值中有ENT 的任何东西?比如ENT-M-AndENT-M-iOS

【问题讨论】:

  • 你可以用你自己的代码条件(正则表达式)纯javascript来.filter收集。

标签: javascript angularjs angularjs-filter


【解决方案1】:

有一个属性$ 将对您集合中的所有属性执行子字符串搜索。在您的情况下,您可以使用

$scope.LegEntQueue = $filter('filter')(legEncoderQueue, {$: 'ENT'})

From the angular docs

可以使用特殊的属性名称(默认为 $)(例如,在 {$: "text"}) 接受与对象或其任何属性的匹配 嵌套对象属性。

【讨论】:

  • 对不起,我没说对,我想选择所有带有{FileAppCD: 'ENT'}{FileAppCD: 'ENT-M-And'}{FileAppCD: 'ENT-M-iOS'}等的对象。我有 15 个以 ENT 开头的不同 FileAppCD 值,我想一次性选择它们,而不是编写 15 个单独的过滤器语句。
  • @Greyhammer 如果您需要更多控制,我建议您指定过滤函数并使用正则表达式或任何自定义逻辑。
【解决方案2】:

谢谢大家的意见,我花了一点时间才意识到我的无知,以为我可以使用一些内置的角度过滤器来做普通 javascript 可以做的事情。

我的解决方案是创建一个函数:

$scope.regexCount = function(array, feild, pattern) {
    var count = 0;
    for (index = 0; index < array.length; index++) {
        if (pattern.test(array[index][feild])) {
            count ++;
        }
    }
    return count;
};

然后传入我的参数。

$scope.LegEntQueue = $scope.regexCount(legEncoderQueue, 'FileAppCD', /ENT.*/);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2014-06-20
    • 2020-07-25
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多