angular.js - 如何用angular的run来将用户数据存储下来?
怪我咯
怪我咯 2017-05-15 17:07:45
0
1
736

我想通过run来设置一个$rootScope.userinfo,然后不同页面里面也可以通过$rootScope.userinfo来获取当前用户的信息而不需要再去服务器抓取,但是现在遇到了挺多问题。
第一次我在run中直接$http然后设置$rootScope.userinfo=response,然后在各个controller当中通过$scope.userinfo=$rootScope.userinfo来将这个userinfo抓取到当前scope中使用,但是出现了undefined的问题;
第二次我在run中使用broadcast

$rootScope.$broadcast("thisintheuserinfo", response);

然后再在controller里面使用$on

$scope.$on("thisintheuserinfo", function (event, msg) { if(msg){ //$scope.usernamea = msg.user; console.log('123') console.log(msg) } else{ alert(msg) } });

但是出现了$on的function中的代码几乎从来不会运行的问题,似乎是因为run中的那个是异步的,controller的on在broadcast开始前就开始了?无论如何,反正也是错的多对的少。
所以不知道各位有什么好的方法可以给我借鉴一下?

怪我咯
怪我咯

走同样的路,发现不同的人生

membalas semua (1)
刘奇

基本满足要求,可能有一丢丢副作用.

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); }); })
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!