Gibt es eine Möglichkeit, Ereignisse für mehrere Objekte zu abonnieren, indem man $watch
z.B.
$scope.$watch('item1, item2', function () { });
Gibt es eine Möglichkeit, Ereignisse für mehrere Objekte zu abonnieren, indem man $watch
z.B.
$scope.$watch('item1, item2', function () { });
Ab AngularJS 1.3 gibt es eine neue Methode namens $watchGroup
zur Beobachtung einer Reihe von Ausdrücken.
$scope.foo = 'foo';
$scope.bar = 'bar';
$scope.$watchGroup(['foo', 'bar'], function(newValues, oldValues, scope) {
// newValues array contains the current values of the watch expressions
// with the indexes matching those of the watchExpression array
// i.e.
// newValues[0] -> $scope.foo
// and
// newValues[1] -> $scope.bar
});
Beginnend mit AngularJS 1.1.4 können Sie $watchCollection
:
$scope.$watchCollection('[item1, item2]', function(newValues, oldValues){
// do stuff here
// newValues and oldValues contain the new and respectively old value
// of the observed collection array
});
Beispiel Plunker aquí
Dokumentation aquí
$watch
Der erste Parameter kann auch eine Funktion sein.
$scope.$watch(function watchBothItems() {
return itemsCombinedValue();
}, function whenItemsChange() {
//stuff
});
Wenn Ihre beiden kombinierten Werte einfach sind, ist der erste Parameter normalerweise nur ein Winkelausdruck. Zum Beispiel, Vorname und Nachname:
$scope.$watch('firstName + lastName', function() {
//stuff
});
Hier ist eine Lösung, die Ihrem ursprünglichen Pseudocode sehr ähnlich ist und tatsächlich funktioniert:
$scope.$watch('[item1, item2] | json', function () { });
EDITAR: Okay, ich denke, das ist sogar noch besser:
$scope.$watch('[item1, item2]', function () { }, true);
Im Grunde überspringen wir den json-Schritt, was anfangs dumm erschien, aber ohne ihn funktionierte es nicht. Der Schlüssel ist der oft ausgelassene 3. Parameter, der die Objektgleichheit im Gegensatz zur Referenzgleichheit aktiviert. Dann funktionieren die Vergleiche zwischen unseren erstellten Array-Objekten tatsächlich richtig.
Sie können Funktionen in $watchGroup verwenden, um Felder eines Objekts im Geltungsbereich auszuwählen.
$scope.$watchGroup(
[function () { return _this.$scope.ViewModel.Monitor1Scale; },
function () { return _this.$scope.ViewModel.Monitor2Scale; }],
function (newVal, oldVal, scope)
{
if (newVal != oldVal) {
_this.updateMonitorScales();
}
});
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.