ng-repeat中的角度切换滤波器

use*_*534 6 javascript angularjs angularjs-ng-repeat

我正在尝试使用a显示一些数据ng-repeat.我希望对显示的数据进行过滤,当我点击特定项目时,应该删除过滤器.当我再次点击该特定项目时,应再次添加过滤器.

我从一个想法开始,在我看来,我有:

<ion-item class="row" ng-repeat="t in tickets">
    <div class="col" ng-click="toggleFilter(t.name)">{{t.name}}</div>
</ion-item>
Run Code Online (Sandbox Code Playgroud)

在我的控制器中:

.controller('TicketCtrl', function ($scope, $filter) {
    $scope.toggleFilter = function (name) {
        name = $filter('getSlice')(name);
        alert(name);
    }
});   
Run Code Online (Sandbox Code Playgroud)

当我name发出警报时,它会提供正确的过滤项目,但它不会在视图中更新.我认为这必须对孩子的范围做一些事情ng-repeat,但我不知道如何通过切换过滤器来做到这一点.

有没有人有任何建议或解决方案来解决这个问题?

Jav*_*ego 0

它不会在视图中更新,因为在 $scope.toggleFilter 中,您正在修改未与视图绑定的局部变量,在该列表中,角度与您的 $scope.tickets 变量绑定,因此您应该直接修改绑定变量以查看更改在视图中,您可以使用使用 ngRepeat 时可用的 $index 迭代器变量来实现此目的 https://docs.angularjs.org/api/ng/directive/ngRepeat

结果应该是这样的:

-看法:

<ion-item class="row" ng-repeat="t in tickets">
    <div class="col" ng-click="toggleFilter(t.name, $index)">{{t.name}}</div>
</ion-item>
Run Code Online (Sandbox Code Playgroud)

-控制器:

.controller('TicketCtrl', function ($scope, $filter) {
    $scope.toggleFilter = function (name, index) {
        $scope.tickets[index].name = $filter('getSlice')(name);
        alert(name);
    }   
Run Code Online (Sandbox Code Playgroud)

PS 题外话:我看到你正在使用 ionic 框架,如果你要在移动设备中使用 ng-repeat ,如果你使用集合重复指令,性能会好得多,当你使用时,移动设备不会执行流畅使用 ng-repeat 滚动长元素列表,因为角度的 2 路绑定。 http://ionicframework.com/docs/api/directive/collectionRepeat/