Maison > Questions et réponses > le corps du texte
Je souhaite définir un $rootScope.userinfo via l'exécution, puis dans différentes pages, je peux également utiliser $rootScope.userinfo pour obtenir les informations de l'utilisateur actuel sans aller sur le serveur pour l'explorer, mais maintenant j'ai rencontré un beaucoup de problèmes.
Pour la première fois, j'ai directement $http en cours d'exécution, puis j'ai défini $rootScope.userinfo=response, puis j'ai utilisé $scope.userinfo=$rootScope.userinfo dans chaque contrôleur pour capturer ces informations utilisateur dans la portée d'utilisation actuelle, mais un problème non défini s'est produit ;
La deuxième fois que j'ai utilisé la diffusion en cours d'exécution
$rootScope.$broadcast("thisintheuserinfo", response);
Ensuite, utilisez $on
dans le contrôleur$scope.$on("thisintheuserinfo",
function (event, msg) {
if(msg){
//$scope.usernamea = msg.user;
console.log('123')
console.log(msg)
}
else{
alert(msg)
}
});
Mais il y a un problème : le code de la fonction $on ne s'exécute presque jamais. Il semble que, comme celui en cours d'exécution est asynchrone, le contrôleur démarre avant le début de la diffusion ? Quoi qu’il en soit, il y a plus de torts et moins de bien.
Donc, je ne sais pas si vous avez de bonnes méthodes dont je peux apprendre ?
怪我咯2017-05-15 17:09:45
Répond essentiellement aux exigences, il peut y avoir quelques effets secondaires.
var app = angular.module('myApp', []);
app.factory('User', function($q, $timeout){
var userInfo,
loading,
deferred = $q.defer(),
promise = deferred.promise;
return {
getUserInfo: function(){
if(!loading){
loading = true;
// 模拟http请求
console.log('发起请求...')
$timeout(function(){
userInfo = {
name: 'Angularjs',
version: '1.x'
};
deferred.resolve(userInfo);
}, 100);
return promise;
}else if( userInfo ){
console.log('这是缓存的信息');
return $q.resolve(userInfo);
}else{
console.log('正在等待请求的结果...');
return promise;
}
}
}
});
app.controller('MyCtrl',function($scope, User, $timeout){
User.getUserInfo().then(function(userInfo){
console.log('run:',userInfo);
$scope.name = userInfo.name;
});
});
app.run(function(User){
User.getUserInfo().then(function(userInfo){
console.log('controller:',userInfo);
});
})