2016-04-07 6 views
0

Ich habe eine Liste von Kontakten mit ng-repeat (ich verwende meinen Controller als vm), das aktualisiert, wenn ich einen neuen Kontakt hinzufügen, aktuelle bearbeiten oder Kontakte löschen - aber nicht wenn ich die Liste versuche und filtere. Hier ist die ng-repeatNg-Repeat wird nicht mit Array-Änderung aktualisiert

<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)"> 

Hier ist meine Löschfunktion, die funktioniert:

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

Hier ist meine Filterfunktion, das nicht die ng-Wiederholungsliste zu aktualisieren (Ich habe überprüft, dass vm.contacts ist Wechsel):

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

I $ scope.apply versucht, indem(), aber das warf nur einen hässlichen Fehler

+0

Haben Sie überprüfen, ob Ihre Filterfunktion 'filterContacts' läuft? – Roy

Antwort

0

T Die splice() Methode fügt Elemente zu/aus einem Array hinzu oder entfernt sie, und gibt das entfernte Element zurück.

Siehe 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

Das Problem ist, dass ich möchte, dass die Kontakte, die nicht übereinstimmen, aus dem vm.contact-Array entfernt wurden - was funktioniert - aber die ng-Wiederholungsliste wird aus irgendeinem Grund nicht aktualisiert –

+0

Können Sie den Controller-Code veröffentlichen? Ich denke, Sie müssen das Array einer $ scope-Variablen wie folgt zuweisen: '$ scope.contacts = vm.contacts' und Zuordnung der relativen html' ng-repeat = "contact in contacts" – Max