Ich habe eine Webseite, die als Editor für eine einzelne Entität dient und als tiefes Diagramm in der Eigenschaft $ scope.fieldcontainer gespeichert ist. Nachdem ich eine Antwort von meiner REST-API erhalten habe (über $ resource), füge ich 'fieldcontainer' eine Überwachung hinzu. Ich benutze diese Uhr, um festzustellen, ob die Seite / Entität "schmutzig" ist. Im Moment lasse ich die Schaltfläche "Speichern" springen, aber ich möchte die Schaltfläche "Speichern" wirklich unsichtbar machen, bis der Benutzer das Modell verschmutzt.
Was ich bekomme, ist ein einzelner Auslöser der Uhr, der meiner Meinung nach geschieht, weil die Zuweisung von .fieldcontainer = ... unmittelbar nach dem Erstellen meiner Uhr erfolgt. Ich habe darüber nachgedacht, nur eine "dirtyCount" -Eigenschaft zu verwenden, um den anfänglichen Fehlalarm zu absorbieren, aber das fühlt sich sehr hackig an ... und ich dachte, es muss eine "Angular Idiomatic" -Methode geben, um damit umzugehen - ich bin nicht der einzige Verwenden einer Uhr, um ein schmutziges Modell zu erkennen.
Hier ist der Code, mit dem ich meine Uhr eingestellt habe:
$scope.fieldcontainer = Message.get({id: $scope.entityId },
function(message,headers) {
$scope.$watch('fieldcontainer',
function() {
console.log("model is dirty.");
if ($scope.visibility.saveButton) {
$('#saveMessageButtonRow').effect("bounce", { times:5, direction: 'right' }, 300);
}
}, true);
});
Ich denke immer nur, dass es einen saubereren Weg geben muss, als meinen "UI Dirtyying" -Code mit einem "if (dirtyCount> 0)" zu schützen ...
undefined
. Es hat einen Standardwert, der für den Fall erforderlich ist, dass bei meinem Modellupdate nicht alle Informationen angezeigt werden. Einige Werte ändern sich also nicht, sondern müssen ausgelöst werden.