我正在尝试在我的ng-repeat上使用过滤器,这是一个传入参数的函数,但过滤器似乎不起作用。
这是我正在使用的过滤功能。它比较了2个数组,看看每个数组中的匹配项应该返回true或false。
$scope.ifinfav1 = function(f){
return e.indexOf(f) !== -1;
};
这是我正在使用过滤器的HTML。
<ion-view view-title="Favourites">
<ion-content>
<ion-list>
<ion-item id="fav" class="item-icon-right" collection-repeat="office in offices|filter:ifinfav1(office.id)" ng-controller="ModalCtrl" ng-click="openModal(office.id); lastview(office.id);">
<p>{{office.id}}</p>
<p id="details">{{office.LocAddressLine1 + ", " + office.LocAddressLine2 + ", " + office.LocCity + ", " + office.LocCountryDescription + ", " + office.LocZipPostalCode}}</p>
<i ng-class="{'icon ion-android-star': liked(office.id), 'icon ion-android-star-outline': liked(office.id)}" ng-click="togglefav(office.id); $event.stopPropagation();"></i>
</ion-item>
</ion-list>
</ion-content>
</ion-view>
答案 0 :(得分:1)
您无法选择将参数传递给您用作过滤器谓词的函数。
也就是说,您可以不执行:
<p ng-repeat="office in offices | filter:isInFavourites(offices.id)">
您只能指定函数本身,而不是在调用时将传递给它的参数。因此,只有以下内容有效:
<p ng-repeat="office in offices | filter:isInFavourites">
在 AngularJS&#39> <{strong> documentation for filter
(link)中指定:
为数组的每个元素调用该函数,其中元素,其索引以及整个数组本身作为参数。
这里有趣的是元素本身,你的函数传递的第一个参数。您只需更新它即可使用office
个对象而非id
个
例如:
$scope.ifinfav1 = function(office){
return e.indexOf(office.id) !== -1;
};
......会创造奇迹!
这是a working JSFiddle的链接,用于说明我对样本数据的建议。