中继器上的AngularJS自定义过滤器已损坏
我试图在AngularJS中的中继器上应用一个过滤器,但我有一个奇怪的错误正在发生。当页面加载时,中继器就好像在复制数据:6行而不是3行。然后一秒钟后,它转到3行。当我移除过滤器时,它会以3行的方式工作。这是我的过滤器: JS: })) 视图: 数据(文件): [{ “标题”:“伪造数据.docx”, “旗帜”:“红色”, “日期”:“2013年9月13日” },{ “标题”:“伪造数据.docx”, “旗帜”:“红色”, “日期”:“2013年9月15日” },{ “标题”:“伪造数据.docx”, “旗帜”:“绿色”, “日期”:“2013年9月14日” }]中继器上的AngularJS自定义过滤器已损坏,angularjs,filter,angularjs-filter,Angularjs,Filter,Angularjs Filter,我试图在AngularJS中的中继器上应用一个过滤器,但我有一个奇怪的错误正在发生。当页面加载时,中继器就好像在复制数据:6行而不是3行。然后一秒钟后,它转到3行。当我移除过滤器时,它会以3行的方式工作。这是我的过滤器: JS: })) 视图: 数据(文件): [{ “标题”:“伪造数据.docx”, “旗帜”:“红色”, “日期”:“2013年9月13日” },{ “标题”:“伪造数据.docx”, “旗帜”:“红色”, “日期”:“2013年9月15日” },{ “标题”:“伪造数据.doc
为什么它会这样执行?不确定为什么需要forEach(输入,…),因为过滤器会自动应用于中继器中的每个文件 除非要比较对象/数组,否则请使用JavaScript等式x===y而不是angular.equals()
出于性能原因,您应该小心中继器中的复杂过滤器。当我通过过滤器使用firebug时,输入始终是整个阵列。当我将输入视为数组的元素时,它不返回任何内容。我想我显然遗漏了一些关于这些定制过滤器如何工作的信息。变量过滤器=[“全部”];如果(flag_filters.length>0)filters=flag_filters;if(filters.indexOf(input)!==-1)返回输入;问题不在于我是如何提出数据服务请求的。实际上是叫了两次!感谢您的帮助。ngRepeat上的筛选器将作为输入传入整个集合。
app.filter('flagged', function() {
return function(input,flag_filters) {
var filteredElements = [];
var filters = ["ALL"];
if(flag_filters.length > 0)
filters = flag_filters;
angular.forEach(input,function(element) {
angular.forEach(filters,function(color){
if(angular.equals(element.flag,color) || angular.equals("ALL",color))
filteredElements.push(element);
});
});
return filteredElements;
};
tr ng-repeat="file in files | flagged:filtered | orderBy:'date':true"
filtered=["red","green"]