Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用自定义筛选器angularjs筛选2个属性_Javascript_Angularjs_Loops_Angularjs Scope_Angularjs Filter - Fatal编程技术网

Javascript 使用自定义筛选器angularjs筛选2个属性

Javascript 使用自定义筛选器angularjs筛选2个属性,javascript,angularjs,loops,angularjs-scope,angularjs-filter,Javascript,Angularjs,Loops,Angularjs Scope,Angularjs Filter,我试图在Angular中过滤多个属性。我可以通过使用角度过滤器:{title:searchString}轻松过滤一个属性,但要过滤多个属性。。。我创建了自己的自定义过滤器,它尝试通过数组中的任何属性匹配搜索字符串 我需要做的是: 如果通过了John Wayne。。它显示约翰·韦恩,但如果只有约翰或只有韦恩通过。。。它仍然显示约翰·韦恩。同样适用于n w,因为John以n结尾,subTitle以w开头 PS:我只能有一个ng型号 HTML: 我的问题是,我得到一个错误,说: 中继器中不允许重复。使

我试图在Angular中过滤多个属性。我可以通过使用角度
过滤器:{title:searchString}
轻松过滤一个属性,但要过滤多个属性。。。我创建了自己的自定义过滤器,它尝试通过数组中的任何属性匹配搜索字符串

我需要做的是:

如果通过了
John Wayne
。。它显示
约翰·韦恩
,但如果只有
约翰
或只有
韦恩
通过。。。它仍然显示约翰·韦恩。同样适用于
n w
,因为
John
n
结尾,
subTitle
w
开头

PS:我只能有一个ng型号

HTML:

我的问题是,我得到一个错误,说:

中继器中不允许重复。使用“跟踪方式”表达式 指定唯一键。中继器:arr1中的电话


由于
arr1
中存在重复项,因此出现此错误。只需添加
track by$index
即可获得所需的解决方案

<div ng-repeat="tel in arr1 track by $index | custommFilter: searchString:['title','subTitle']"></div>

由于
arr1
中存在重复项,因此出现此错误。只需添加
track by$index
即可获得所需的解决方案

<div ng-repeat="tel in arr1 track by $index | custommFilter: searchString:['title','subTitle']"></div>

我刚刚对您的自定义过滤器进行了一些更新:

app.filter('customFilter',[ function() {
    return function(items, searchText, attrs) {
        var filtered = []; 
        for (var i in items){
          var keepGoing = true;
          angular.forEach(attrs, function(attr) {
            console.log(items[i][attr])
                if (items[i].hasOwnProperty(attr) && items[i][attr].includes(searchText)  && keepGoing) {
                    filtered.push(items[i]);
                    keepGoing=false;
                }
            });
        }

        return filtered;
  };
}])
考虑到在这种情况下,它是区分大小写的

虽然它是工作的预期,我觉得它可以改进

普朗克样品:

我刚刚对您的自定义过滤器进行了一些更新:

app.filter('customFilter',[ function() {
    return function(items, searchText, attrs) {
        var filtered = []; 
        for (var i in items){
          var keepGoing = true;
          angular.forEach(attrs, function(attr) {
            console.log(items[i][attr])
                if (items[i].hasOwnProperty(attr) && items[i][attr].includes(searchText)  && keepGoing) {
                    filtered.push(items[i]);
                    keepGoing=false;
                }
            });
        }

        return filtered;
  };
}])
考虑到在这种情况下,它是区分大小写的

虽然它是工作的预期,我觉得它可以改进

普朗克样品:

您的筛选器名称有错误:筛选器名称中有customFilter,筛选器名称中有custommFilterhtml@ManuelObregozo哎呀。。那是个打字错误。不小心在帖子中插入了这个,但这不是问题我仍然明白它的意思过滤器的意思,你的数组的输出是什么?@ManuelObregozo基本上。。。无论在搜索字段中键入什么。。。我希望它与数组的所有属性相匹配我想我得到了,让我把所有内容放在一个列表中。如果您的筛选器名称中有错误:筛选器名称中有customFilter,筛选器名称中有custommFilterhtml@ManuelObregozo哎呀。。那是个打字错误。不小心在帖子中插入了这个,但这不是问题我仍然明白它的意思过滤器的意思,你的数组的输出是什么?@ManuelObregozo基本上。。。无论在搜索字段中键入什么。。。我希望它能与阵列的所有属性相匹配我想我得到了它,让我把所有的东西放在一起,当我在最后插入曲目时,错误就消失了。。。但现在它没有做我想让它做的事。。。它不会一次使用标题或子标题进行正确筛选。你怎么能同时处理这两个呢?当我在末尾插入track by时,错误就消失了。。。但现在它没有做我想让它做的事。。。它不会一次使用标题或子标题进行正确筛选。你怎么能同时处理这两个呢?我以前也试过:(…但在你的例子中,当我键入“wayne”时,它不起作用)这就是促使我创建自定义筛选器的原因匹配条件也可以是子字符串?似乎按预期工作,请检查。考虑到它区分大小写。如果您不希望它是那样的,只需将该项转换为小写。希望它有帮助我以前也尝试过:(…但在您的示例中,当我键入“wayne”时,它不起作用,这正是导致我创建自定义筛选器的原因匹配条件也可以是子字符串?似乎按预期工作,请检查。考虑到它区分大小写。如果您不想这样,请将该项转换为小写。希望它有所帮助