ng-repeat过滤功能

时间:2015-12-08 16:33:00

标签: javascript angularjs ionic

我正在尝试在我的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>

1 个答案:

答案 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的链接,用于说明我对样本数据的建议。