recherche

Maison  >  Questions et réponses  >  le corps du texte

angulaire.js - Comment utiliser l'exécution d'Angular pour stocker les données utilisateur?

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 ?

怪我咯怪我咯2828 Il y a quelques jours813

répondre à tous(1)je répondrai

  • 怪我咯

    怪我咯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);
        });
    })

    répondre
    0
  • Annulerrépondre