Ng重复不更新数组更改

时间:2016-04-07 16:39:27

标签: javascript angularjs angularjs-ng-repeat

我有一个使用ng-repeat的联系人列表(我使用我的控制器作为vm),当我添加新联系人,编辑当前联系人或删除联系人时会更新联系人 - 但是当我尝试过滤列表时却没有。这是ng-repeat

<div ng-repeat="contact in vm.contacts | filter:query | orderBy:'firstname' track by contact._id" class="list-item pointer" ng-class="{'dker': contact.selected }" ng-click="vm.selectContact(contact)">

这是我的删除功能:

      function deleteContact(contact){
        vm.contacts.splice(vm.contacts.indexOf(contact), 1);
        Stamplay.Object('contact')
          .remove(contact._id, function(err, res) {
            if(err) return console.log(err);
            console.log(res);
          })
        selectOne();
        };

这是我的过滤功能没有更新ng-repeat列表(我已经检查过vm.contacts正在改变):

      function filterContacts(group){
        angular.forEach(vm.contacts, function(contact){
          if(contact.groups){
            if(contact.groups.indexOf(group.groupname) === -1) {
              vm.contacts.splice(vm.contacts.indexOf(contact), 1);
            }
          }
        });
        selectOne();
      };

我尝试添加$ scope.apply(),但这只是引发了一个丑陋的错误

1 个答案:

答案 0 :(得分:0)

splice()方法在数组中添加/删除项目,返回已删除的项目

请参阅splice on mozilla

function filterContacts(group){
        angular.forEach(vm.contacts, function(contact){
          if(contact.groups){
            if(contact.groups.indexOf(group.groupname) === -1) {
              // assign the result to itself
              vm.contacts = vm.contacts.splice(vm.contacts.indexOf(contact), 1);
            }
          }
        });
        selectOne();
      };