AngularJS - 刷新ng-repeat

use*_*955 37 javascript angularjs

我正在使用ng-repeat来显示一组值.我的过滤器选项根据对服务器的ajax调用而更改.如何在收到过滤器参数后刷新ng-repeat?

小提琴

模板

<div>
<div data-ng-controller="myCtrl">
    <ul>
        <li data-ng-repeat="item in values | filter:filterIds()"> 
            <code>#{{item.id}}</code> Item
        </li>
    </ul>
   </div>
 </div> 
<button ng-click="loadNewFilter()"> filter now</button>
Run Code Online (Sandbox Code Playgroud)

var app = angular.module('m', []);

app.controller('myCtrl', function ($scope) {
  $scope.values = [
   {id: 1},
   {id: 2},
   {id: 3},
   {id: 4},
   {id: 5},
   {id: 6}
  ];

  $scope.filter = [1,2,3,4,5,6];

  $scope.filterIds = function (ids) {
        return function (item) {
            var filter = $scope.filter;
            return filter.indexOf(item.id) !== -1;          
        }
  }

  $scope.loadNewFilter = function (){
    $scope.filter = [1,2,3];      
   }
});
Run Code Online (Sandbox Code Playgroud)

Chr*_*les 42

你需要告诉angular值值有变化:

$scope.loadNewFilter = function (){
    $scope.filter = [1,2,3];      
    $scope.$apply();
}
Run Code Online (Sandbox Code Playgroud)

  • @ user1477955:http://jsfiddle.net/6nssg30q/6/按钮超出控制器范围.它现在有效 (3认同)

Gau*_*rav 7

您已经 <button ng-click="loadNewFilter()"> filter now</button>摆脱了控制器范围.


aoa*_*son 7

在我的情况下,我在我的ng-repeat中有一个trackBy,不得不将其删除以使其更新.