Dato che la risposta pratica è già stata data, cercherò di spiegarti cosa succede realmente e perché non ha funzionato nel modo in cui hai provato la prima volta.
Prima di tutto questo codice funziona sicuro,
$scope.$watch(function() {
return $scope.someData;
}, function(value) {
console.log(value);
});
Ma questo è NON il modo perfetto. Per essere più precisi $watch
inietta il scope
nella funzione, in questo modo,
$scope.$watch(function(injectedScope) {
return injectedScope.someData;
}, function(value) {
console.log(value);
});
precedenza Funziona perché $scope
e injectScope
sono uno e la stessa cosa.
Ora, come questo article spiega,
Dal $scope
è passato attraverso la funzione di orologio, significa che siamo in grado di guardare qualsiasi funzione che si aspetta che il campo di applicazione come argomento e restituisce un valore in risposta. Un ottimo esempio di ciò è la funzione $interpolate
.
Quindi nel tuo caso, possiamo anche fare uso di $interpolate
come segue:
$scope.$watch($interpolate("{{someData}}"), function(value) {
...
});
Ora, questo è dove veniamo al metodo di breve mano utilizzando solo un'espressione di controllo. $watch
può anche accettare un'espressione, che in realtà è interpolata.
Così fornendo $scope.$watch("someData", ...)
,
someData
saranno:
- interpolati come
{{someData}}
- usando l'ambito iniettato da
$watch
funzione
Questo è un piacevole, pulito, leggibile , modo di scrivere a mano bassa l'espressione invece della funzione effettiva. Ma alla fine, dopo tutte queste compilazioni, è in definitiva la funzione che restituisce un valore da guardare.
do: '$ scope. $ Watch ('someData', funzione (...' – Yoshi