was ist mit einem einfacheren Ansatz?
sagen wir, Sie ein Element wie dieses:
<div ng-show="someBooleanValue"></div>
Wenn Sie einen AND-Operator nach displayMyDiv verwenden und einen Rückruf dort setzen, würde der Rückruf nur ausgeführt werden, wenn der erste Wert TRUE ist (das ist, wie die logischer UND-Operator funktioniert). So ist das, was ich mit Winkel 1.15.10 ausprobiert und es funktioniert:
$scope.showLightbox = function() {
// your logic goes here
return true;
}
<div ng-show="someBooleanValue && showLightbox()"></div>
Wenn und nur wenn someBooleanValue wahr ist, dann $ scope.showLightbox() wird auch ausgewertet werden. Sie müssen also $ scope.showLightbox() setzen, um TRUE zurückzugeben, sonst ist Ihr div nicht sichtbar.
Dieser Weg ist nicht nur einfacher, er behandelt auch die Observer-Implementierung in eckig (weniger zu wartender Code), und die Callback-Rückgabe wird nur ausgewertet, wenn sich someBooleanValue auf TRUE ändert.
MBielski hat die richtige Antwort. Verwenden Sie einen booleschen Wert, nicht $ Watch (in diesem Fall) – mortsahl
Der vorgeschlagene Ansatz von Andrey Shustariov wird in einer verschachtelten Controller-Situation benötigt, wenn Sie eine Funktion auf dem inneren Controller aufrufen müssen, wenn ng-show im Bereich des äußeren Controllers auftritt. In dieser Situation funktioniert MBielskis Ansatz nicht, da der äußere Controller den Umfang und die Funktion des inneren Controllers nicht kennt. –
Die Verwendung der "Controller as" -Syntax löst das verschachtelte Controller-Problem, und dies ist immer noch nicht die beste Verwendung für eine $ watch. – MBielski