2016-04-07 2 views
0

У меня есть список контактов с использованием ng-repeat (я использую свой контроллер как vm), который обновляется, когда я добавляю новый контакт, редактирую текущие или удаляю контакты - но не когда я пытаюсь фильтровать список. Вот нг-повторNg-Repeat Not Updating With Array Change

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

Вот моя фильтрация функция, не обновляя нг повтора списка (я проверил, что 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(), но это просто бросил уродливый ошибку

+0

ли вы проверить, если ваша функция фильтра 'filterContacts' работает? – Roy

ответ

0

T он 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(); 
     }; 
+0

Проблема в том, что я хочу, чтобы контакты, которые не соответствуют удалению из массива vm.contacts - который работает, но список ng-repeat не обновляется по какой-либо причине –

+0

Можете ли вы опубликовать код контроллера? Я думаю, вы должны назначить массив переменной $ scope следующим образом: '$ scope.contacts = vm.contacts' и сопоставление относительного html' ng-repeat = "контакта в контактах' – Max