Meine Absicht ist, ein Modell innerhalb des Umfangs zu beobachten und den Unterschied zwischen altem Wert und neuem Wert zu finden.
Allerdings fand ich alten Wert und neuen Wert sind alle gleich aus dem folgenden Code.
app.controller('MyCtrl', function($scope, $timeout){
$scope.markers = {};
$scope.$watchCollection('markers', function(newValue, oldValue){
console.log('being watched oldValue:', oldValue, 'newValue:', newValue);
});
$timeout(function() {
$scope.markers.foo = 1;
}, 500);
$timeout(function() {
$scope.markers.bar = 2;
}, 500);
});
Ausgang:
being watched oldValue: Object {} newValue: Object {} script.js:6
being watched oldValue: Object {foo: 1} newValue: Object {foo: 1} script.js:6
being watched oldValue: Object {foo: 1, bar: 2} newValue: Object {foo: 1, bar: 2}
Warum sind sie gleich, und wenn es gewollt, dann warum?
hier ist der Code, http://plnkr.co/edit/rfMCF4x6CmVVT957DPSS?p=preview
Entweder die Dokumentation ist nicht up-to-date oder es ein Fehler ist. 'newValue === oldValue' gibt' false' an, also würde ich eher denken, dass es ein Fehler ist. –
Stellt sich heraus, es ist ein bekannter Fehler: https://github.com/angular/angular.js/issues/2621 – KayakDave
Ich nahm an, dass $ watchCollection Abkürzung von Deep $ watch ist. Es scheint nicht. – allenhwkim