循环依赖的AngularJS多参数滤波
我试图创建一个商店索引,按类别显示它们,所以我有两个ng repeat,一个用于类别,另一个用于商店 我有一个类别数组 (['cat1'、'cat2'、…]) 还有一个在商店里 ([{name:'shop1',类别:['cat2','cat3']},…]) 以下是中继器的HTML代码:循环依赖的AngularJS多参数滤波,angularjs,filter,circular-dependency,Angularjs,Filter,Circular Dependency,我试图创建一个商店索引,按类别显示它们,所以我有两个ng repeat,一个用于类别,另一个用于商店 我有一个类别数组 (['cat1'、'cat2'、…]) 还有一个在商店里 ([{name:'shop1',类别:['cat2','cat3']},…]) 以下是中继器的HTML代码: <div ng-repeat="categoria in categorias | filter:categorySearch:strict"> <h3>{{categoria}}
<div ng-repeat="categoria in categorias | filter:categorySearch:strict">
<h3>{{categoria}}</h3>
<hr width="70%" align="left">
<table style="text-align: center;" class="col-xs-12 col-sm-12 col-md-12 table table-bordered table-striped" class="tabla_tiendas">
<tr ng-repeat="tienda in tiendas | filter:{agregada: 'false'} | filterByCategory:categoria:tienda" >
<td class="col-xs-4 col-sm-4 col-md-4 tienda-{{tienda.seleccionada}}"><input type="checkbox" ng-change="setPosition(tienda, tienda.seleccionada)" ng-model="tienda.seleccionada" value="{{tienda.id}}"></td>
<td class="col-xs-4 col-sm-4 col-md-4 tienda-{{tienda.seleccionada}}">{{tienda.nombre}}</td>
<td class="col-xs-4 col-sm-4 col-md-4 tienda-{{tienda.seleccionada}}">{{tienda.categorias}}</td>
</tr>
</table>
</div>
最后,这里是错误:
Error: Circular dependency:
at Error (<anonymous>)
at Object.c [as get] (http://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js:26:368)
at http://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js:108:41
at l (http://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js:70:141)
at Oc.fa (http://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js:74:463)
at k (http://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js:69:505)
at Oc (http://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js:75:29)
at http://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js:78:241
at Object.e.$watchCollection (http://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js:88:58)
at http://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js:156:40 <!-- ngRepeat: tienda in tiendas | filter:{agregada: 'false'} | filterByCategory:categoria:tienda --> angular.min.js:63
(anonymous function) angular.min.js:63
(anonymous function) angular.min.js:53
l angular.min.js:44
e angular.min.js:39
e angular.min.js:39
e angular.min.js:39
e angular.min.js:39
(anonymous function) angular.min.js:38
(anonymous function) angular.min.js:157
(anonymous function) angular.min.js:89
e.$digest angular.min.js:89
e.$apply angular.min.js:91
(anonymous function) angular.min.js:152
(anonymous function) angular.min.js:23
o angular.min.js:6
c
错误:循环依赖项:
错误地(
(如果我使用过滤器“filterByCategory”,我会得到循环依赖关系,如果我使用过滤器“filterByCategory Scope”,我不会得到参数类别,因此我无法过滤)您的过滤器工厂无效
角度过滤器在以下签名中定义:
app.filter('filterName', function(/*optional injectables*/){
return function(item, param1, param2, ...){
//some filter-specific calculations...
return true/false
}
});
和在具有以下语法的视图表达式中使用:
ng-repeat="item in items | filterName:param1:param2"
您的筛选器未正确定义为:
app.filter('filterByCategory', function(tienda, categoria){
return function(tienda, categoria){
return _.contains(tienda.categorias, categoria);
};
});
由于过滤器工厂和实际过滤器功能之间的混淆,您已指示Angular查找并注入tienda
和categoria
依赖项,但这些依赖项并不存在
因此,正确的筛选器签名是:
myApp.filter('filterByCategory', function(){
return function(shop, categoria){
return _.contains(shop.categorias, categoria);
};
});
使用方法:
ng-repeat="shop in shops | filterByCategory:categoria"
问题解决了,非常感谢大家
以下是JSFIDLE的最终结果:
HTML:
{{category}}
{{shop.name}
过滤器:
myApp.filter('filterByCategory', function () {
return function (shops, category) {
return _.filter(shops, function(shop){
return _.contains(shop.categories, category)
});
};
});
你能不能也发布tienda
model?tienda是一家商店,所以它的型号是:{name:'shop1',categories:['cat2','cat3']}如果您临时使用普通的angular.js
而不是angular.min.js
,并使用脚本的非精简版本,您会发现更容易识别错误中的哪些变量。谢谢!您在指导我找到解决方案时帮了我很多忙!
myApp.filter('filterByCategory', function () {
return function (shops, category) {
return _.filter(shops, function(shop){
return _.contains(shop.categories, category)
});
};
});