Angularjs angular JS$rootScope未在$http.get中定义
我想从$http.get检索数据并将其放入$rootScope: .runAngularjs angular JS$rootScope未在$http.get中定义,angularjs,undefined,Angularjs,Undefined,我想从$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'
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;
});
.控制员
app.controller('userCtrl', ['$scope', function ( $scope) {
console.log($scope.user);
}]);
但是控制器中$scope.user的值未定义。知道怎么修吗?
谢谢$rootScope应该被注入到服务中。像这样
.service('ServiceGetSVC',['$http','$rootScope','$q',function($http,$rootScope,$q){..}
或者,如果您尝试在方法get之后使用$rootScope.user。由于方法get asynchronous,因此未定义$rootScope.user。应使用deferred
应用中
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;
}])
是否将其注入控制器?是的。当我使用$rootScope.user=“test”时,在控制器中$scope.user显示test。当我在$http.get中使用$rootScope.user时,$scope.user显示未定义。请注意,当我使用console.log(数据)时在$http.get中,我看到了数据您是否使用了像uglifyjs这样的混乱系统?如何声明变量app…我使用$window.sessionStorage.currentUser。麻烦少了!目标是让$rootScope.user在我的app.run中运行,这样我就可以在所有控制器中使用用户值。这不是喷油器的问题,而是$http.getI ad的问题d简单的解决方案。同样的问题!我还有未定义的问题。我用更多的代码更新了我的初始问题。我使用$window.sessionStorage。麻烦少了!