Ci sono un paio di modi per registrare un callback una volta completato il digest.
Utilizzando $$postDigest
: $scope.$$postDigest
incendi una richiamata dopo che la corrente $digest
ciclo completato.
Tuttavia, questa operazione viene eseguita solo una volta dopo il successivo ciclo di digestione. Per eseguirlo dopo ogni ciclo di digest eseguilo insieme a $watch
. Questo è basato sul codice di esempio given here
var hasRegistered = false;
$scope.$watch(function() {
if (hasRegistered) return;
hasRegistered = true;
$scope.$$postDigest(function() {
hasRegistered = false;
fn();
});
});
Il $watch
può ottenere innescato più volte nel corso di un ciclo di digerire in modo da utilizzare una bandiera hasRegistered
per evitare $$postDigest
richiamata da registrare più volte. Nota: $$ postDigest non attiverà un altro ciclo di digestione. Quindi qualsiasi modifica apportata a $scope
all'interno di $$postDigest
non verrà visualizzata nella dom. $$
significa che questa è una funzione privata in angularjs, quindi la funzione non è stabile e potrebbe cambiare in futuro.
Utilizzando $timeout
:
$timeout(function(){
console.log("Running after the digest cycle");
},0,false);
Questo viene eseguito dopo che la corrente digest ciclo è completo. Nota: il terzo argomento è impostato su false per impedire un altro trigger del ciclo digest.
puoi passare attraverso questa domanda http://stackoverflow.com/questions/29002977/why-ng-model-value-not-updating-in-scope-variable –
L'approccio $ timeout ha funzionato come un incantesimo! –