Javascript AngularJS-刷新ng重复

Javascript AngularJS-刷新ng重复,javascript,angularjs,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}}<

我使用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>
棱角的

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];      
   }
});

您需要告诉angular,值发生了更改:

$scope.loadNewFilter = function (){
    $scope.filter = [1,2,3];      
    $scope.$apply();
}

在收到名为$scope.$apply()的筛选器后,如下所示:刷新您的作用域

$scope.$apply(function() {
     // your code
});
您已放置
现在过滤
超出控制器范围。

在我的情况下,我的ng repeat中有一个trackBy,必须将其删除以进行更新

我不需要使用$scope.apply()来查看更新。对我来说,解决这个错误的方法是确保:

  • 正在从控制器内部调用更新
  • 调用更新的控制器与包含ng repeat的控制器相同

  • @user1477955:按钮超出控制器的范围。它现在起作用了这解决了我遇到的一个问题,即通过回调向数组中添加项不会自动更新ng repeat。调用$source.$apply();在添加一个新项目后,它显示得很好。对我来说,完全是相同的问题!谢谢-我从来没有想到tracyBy会引起问题-我只知道它以前解决过问题@Meliodas您可以使用$index而不使用TrackByFuncy,我的下一个问题是如何在angularJS中调用单击事件。谢谢你:)+1