Ich bin Anfänger mit angularJs und habe, wie ich denke, ein einfaches Problem mit whatching Änderungen in meinem $scope
.Wie aktiviert man automatische watch angularJs?
Ich habe ein Objekt $scope.tasks
, die ich vom Server erhalten habe. Es sieht aus wie:
{
2: {id: 2, name: 'name1', user: 3},
3: {id: 3, name: 'name2', user: 1},
4: {id: 4, name: 'name3', user: 4},
}
auch i eine Funktion, die Update-Benutzer in Aufgabe haben:
$scope.managePlannedIterationTask = function(taskId, userId) {
var data = {
'taskId' : taskId,
'userId' : userId
};
$http.post("url", data).success(function(data, status) {
$scope.tasks[taskId].user = userId; //#1
});
};
ich habe auch benutzerdefinierte Funktion $scope.test();
diese Funktion nach jedem Benutzerwechsel in Aufgaben ausgeführt werden müssen, zum Beispiel nach dem Update-Abfrage und Aktualisierung bei // # 1
ich habe versucht, für dieses Ziel $ Uhr zu verwenden und $ watchCollection:
$scope.$watchCollection('tasks', function() {
$scope.test();
})
Aber das hilft nicht. Und jetzt muss ich an allen Stellen $scope.test()
einfügen, wenn ich meine $ scope.tasks aktualisiere. Es ist sehr traurig. Wie kann ich es automatisch machen?
Wann registrieren Sie die Uhr und wie lösen Sie Änderungen aus? –
@DavidL Ich registriere Uhr am Ende meines Controllers und triggere die Änderung mit ng-change in select. – Neversmile
Das ist dein Problem. Registrieren Sie es am Anfang. Wenn Sie es am Ende registrieren, gibt es eine vernünftige Chance, dass es erst registriert wird, wenn die Interaktion, die es beobachten würde, bereits vorüber ist. Und schließlich könnte dies ein Anzeichen für einen Design-Geruch sein. Möglicherweise möchten Sie stattdessen eine Callback-ähnliche Vorgehensweise in Betracht ziehen. –