2015-11-11 51 views
0

我想要检索从$ http.get数据,并把它放在$ rootScope内:

.RUN

app.run(function ($rootScope, $q, $http, $timeout, stateRules) { 

    stateRules 
    .then(function (data) { 
     $rootScope.user = data; 
     console.log(data); 
    }); 
}); 

。服务

app.service('stateRules', ['$http','$q', function($http, $q) { 
    var userUrl= 'api/user/'; 
    var userService = {}; 
    var deferred = $q.defer(); 
    $http.get(userUrl+ "getUserName", { cache: true }).success(function (data) { 
     deferred.resolve(data); 
    }); 
    return deferred.promise; 
}); 

.controller

app.controller('userCtrl', ['$scope', function ($scope) { 
     console.log($scope.user); 

}]); 

但我的控制器中的$ scope.user的值是未定义的。任何想法如何解决它? 谢谢

+1

你它注入到控制器? – tymeJV

+0

是的。当我使用$ rootScope.user =“test”时,在我的控制器中$ scope.user显示测试。当我在$ http.get中使用$ rootScope.user时,$ scope.user显示为undefined。请注意,当我做$ http.get中的console.log(数据)时,我看到数据 – user708683

+0

您是否使用像uglifyjs这样的mangling系统? 后您如何声明变量应用程序... – Hitmands

回答

0

$ rootScope应该注入一个服务。喜欢这个。

.service('ServiceGetSVC', ['$http','$rootScope','$q',function ($http,$rootScope,$q) {....}

或者,如果您尝试使用$ rootScope.user方法后得到的。它是未定义的becouse方法变得异步。应该使用延期。

应用

ServiceGetSVC.then(data){ 
    $rootScope.user = data; 
} 

service 
    .service('stateRules', ['$http','$q' function($http, $q) { 
    var deferred = $q.defer(); 
    $http.get(communUrl + "getUserName", { cache: true }).success(function (data) { 
     deferred.resolve(data); 
    }); 
    return deferred.promise; 
    }]) 
+0

目标是在我的app.run中拥有$ rootScope.user,这样我就可以在我的所有控制器中使用用户值。这不是注射器的问题,但用$ http.get – user708683

+0

我添加了简单的解决方案。 –

+0

同样的问题!我仍然没有定义。我用更多的代码更新了我的最初问题。 – user708683