传递ng-repeat变量未定义
问题描述:
我正在尝试使用ng-repeat在Angular中使用自定义过滤器。问题是我的数据没有正确传递。传递ng-repeat变量未定义
我的HTML:
<div class="card" ng-repeat="acqui in acquis | orderBy:'date':true | fieldFilter: this">
我的过滤器:
.filter('fieldFilter', function() {
return function(acqui, $scope) {
if($scope.fieldFilter.length > 0) {
console.log($scope.fieldFilter);
for(let i = 0; i < $scope.fieldFilter.length; i++) {
if(acqui.field === $scope.fieldFilter[i]) {
return acqui;
}
}
} else {
return acqui;
}
}
});
我试图从NG-重复到$范围变量比较阿奎,但由于某种原因acqui.field是不确定的,尽管我确信它很简单,但我对于尝试尝试的方式确实感到不知所措。
答
您不能将整个$scope
传递给您的角度过滤器(尽管这只是想法不好的方法)。您可以通过在过滤器名称后面提及它来传递过滤对象。
ng-repeat="acqui in acquis | orderBy:'date':true | fieldFilter: fieldFilter"
过滤
.filter('fieldFilter', function() {
//fieldFilter will have passed `fieldFilter` object from `$scope`
//where as `acquis` is an array.
return function(acquis, fieldFilter) {
if(fieldFilter.length > 0) {
console.log(fieldFilter);
for(let i = 0; i < fieldFilter.length; i++) {
//here you have `acquis` not acqui
//if(acqui.field === fieldFilter[i]) {
// return acqui;
//}
}
} else {
return acqui;
}
}
});
说干就干,所做的更改,只是因为它是更好的做法,但它并没有解决问题。 acqui是什么是undefined,而不是fieldFilter。 –
@ Ryan-Llaver基本上你会得到'acquis'而不是'acqui' –
现在我明白了,所以我将不得不通过acquis.length循环并检查每个acquis.acqui.field? –