Vorrei iniziare dicendo che quello che sto cercando di fare probabilmente non è considerato una buona pratica. Tuttavia, ho bisogno di fare qualcosa di simile al fine di migrare una grande app Web in AngularJs in piccoli passaggi incrementali.Angolare: è possibile guardare una variabile globale (I.e al di fuori di un ambito)?
Ho provato a fare
$scope.$watch(function() { return myVar; }, function (n, old) {
alert(n + ' ' + old);
});
Dove myVar è una variabile globale (definito sulla finestra)
E myVar quindi modificando dalla console. Ma si attiva solo quando si imposta per la prima volta l'osservatore.
Funziona se aggiorno myVar dall'interno del controller (vedi http://jsfiddle.net/rasmusvhansen/vsDXz/3/, ma non se si aggiorna da qualche eredità javascript
Esiste un modo per raggiungere questo obiettivo?
Aggiornamento Mi piace La risposta di Anders è che se il codice legacy è completamente off limits, al momento sto guardando questo approccio che sembra funzionare e non include un timer che scatta ogni secondo:
// In legacy code when changing stuff
$('.angular-component').each(function() {
$(this).scope().$broadcast('changed');
});
// In angular
$scope.$on('changed', function() {
$scope.reactToChange();
});
Sto assegnando punti a Anders anche se andrò con un'altra soluzione, poiché la sua soluzione risolve correttamente il problema indicato.
probabilmente non si vuole utilizzare 'each' per la trasmissione in modo angolare fa una sola digest – charlietfl
Nel tuo codice di esempio, a cosa puntava '.angular-component'? – mlhDev
Nel mio caso, ho selezionato l'elemento che volevo effettivamente cambiare (usando 'angular.element (document.getElementById())' perché non stavo usando jQuery), quindi chiamato 'scope(). $ Broadcast ('customEventName'); '. Nota che dovevo usare '$ apply()' all'interno della funzione '$ on ('customEventName')' per far chiamare gli osservatori. –