ng-repeat 按功能过滤

ng-repeat filter by function

我正在尝试在我的 ng-repeat 上使用过滤器,这是一个传入参数的函数,但过滤器似乎不起作用。

这是我正在使用的过滤功能。它比较 2 个数组以查看每个数组中的匹配项应该 return 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>

无法选择将哪些参数传递给您用作过滤器谓词的函数。
也就是说,您可以做:

<p ng-repeat="office in offices | filter:isInFavourites(offices.id)">

您只能指定函数本身,而不能指定调用时传递给它的参数。因此,只有以下内容有效:

<p ng-repeat="office in offices | filter:isInFavourites">

AngularJS 的 documentation for filter (link):

The function is called for each element of the array, with the element, its index, and the entire array itself as arguments.

对您来说有趣的是 元素 本身,您的函数传递的第一个参数。您只需更新它即可使用您的 office 对象而不是它们的 ids.
例如:

$scope.ifinfav1 = function(office){
  return e.indexOf(office.id) !== -1;
};

...会创造奇迹!

这里有一个 link 到 a working JSFiddle 用示例数据说明我的建议。