Il modo più semplice per eseguire questa operazione è utilizzare un servizio. Ad esempio:
app.factory('AuthService', function() {
var currentUser;
return {
login: function() { ... },
logout: function() { ... },
isLoggedIn: function() { ... },
currentUser: function() { return currentUser; }
...
};
});
È quindi possibile fare riferimento a questo in qualsiasi controller. Il codice seguente controlla le modifiche di un valore dal servizio (chiamando la funzione specificata) e quindi sincronizza i valori modificati nell'ambito.
app.controller('MainCtrl', function($scope, AuthService) {
$scope.$watch(AuthService.isLoggedIn, function (isLoggedIn) {
$scope.isLoggedIn = isLoggedIn;
$scope.currentUser = AuthService.currentUser();
});
});
E quindi, naturalmente, è possibile utilizzare tali informazioni come meglio credi; per esempio. nelle direttive, nei modelli, ecc. È possibile ripetere questo (personalizzato per ciò che è necessario fare) nei controller dei menu, ecc. Sarà tutto aggiornato automaticamente quando si modifica lo stato del servizio.
Qualcosa di più specifico dipende dalla vostra implementazione.
Spero che questo aiuti!
fonte
2013-01-08 00:41:29
Questo è quello che stavo pensando anche io, ma sono curioso di sapere come funziona la fabbrica. Non otterremo un contesto correnteUser diverso ogni volta che viene creato un controller e richiede un AuthService? Forse non sono chiaro su come Angular si agganci. Idealmente avremmo un contesto. In alternativa pensavo di usare il negozio ngCookies (non la mia idea preferita) o lo spazio di archiviazione del browser (non ancora ben supportato). –
@ChrisNicola In realtà, in AngularJS tutti i servizi sono singletons. Quindi il servizio viene creato la prima volta che viene richiesto (ad esempio da un controller o un altro servizio) e tutte le richieste successive restituiscono la stessa identica istanza. –
@JoshDavidMiller Hai la proprietà 'isLoggedIn' come funzione? Non sarebbe un booleano? – nicholas