2017-01-12 3 views
3

Im Zusammenhang mit Einfügen oder Löschen aus einem Array in angular, ist es möglich, das Array zu sehen und dann das Objekt, das hinzugefügt oder aus dem Array gelöscht wurde, zu bekommen? Die Eigenschaften der Objekte im Array sind mir egal, nur die Objekte selbst werden hinzugefügt oder gelöscht. Ich glaube also, dass $ watchCollection hier gut passt, also ist es keine tiefe Uhr.Angularjs beobachten Array und Objekt geändert

Zum Beispiel, ich habe dieses Array als Modell für ein Dual-Listenfeld:

$scope.employees = [ 
    { 
     name: "Bob", 
     id: "0" 
    }, 
    { 
     name: "Carl", 
     id: "1" 
    }, 
    { 
     name: "Bill", 
     id: "2" 
    } 
    ]; 

Die Listbox automatisch $ scope.employees werden aktualisiert, wenn ich ein bewege weg von ihnen oder auf sie (Einfügen/Löschen). Wenn ich das tue:

$scope.$watchCollection('employees', function(){ 
    //somehow get changed object 
    var changedObject = ...; 
    $scope.changedItems.push(changedObject); 
    }); 

Ich mag das hinzugefügt/gelöscht Element in der Lage zu bekommen, damit ich es verwenden kann oder es irgendwo speichern.

+0

die neuen und alten Werte verwenden '$ scope $ watchCollection ('Mitarbeiter', function (newVal, oldVal) ' – Ronnie

+0

@Ronnie, enthalten diese Werte nicht die gesamten Array-Objekte? Müsste ich vergleichen, um das geänderte Objekt zu finden? –

+0

Ja, ich glaube nicht, dass es eine Out of the Box-Methode gibt dir zu sagen, was du verändert hast, vielleicht kümmerst du dich darum, wenn du das Ob verändern willst anstatt auf eine Uhrmethode zu vertrauen. – Ronnie

Antwort

1

Die $watchCollection-Handler-Funktion empfängt sowohl neue als auch alte Wert.

$scope.$watchCollection('employees', function(newValue, oldValue){ 
    console.log(newValue); 
    console.log(oldValue); 

    var addedArray = newValue.filter(x => !oldValue.find(x)); 
    var removedArray = oldValue.filter(x => !newValue.find(x)); 

    //somehow get changed object 
    var changedObject = ...; 
    $scope.changedItems.push(changedObject); 
    }); 

Weitere Informationen finden Sie AngularJS $watchCollection API Reference

+0

Dies ist buchstäblich der erste Kommentar zu dieser Frage. – Ronnie

+0

Code hinzugefügt, um hinzugefügte und entfernte Elemente zu finden – georgeawg

+0

Noch immer wird nicht erklärt, wie man das changedObject bekommt – Anton

Verwandte Themen