javascript - 观察 angularjs $rootScope 变量

标签 javascript angularjs rootscope

我正在使用 $rootScope 初始化我的应用程序运行函数中的函数,如下所示 -

angular.module('student').run(function($sce,$rootScope, $location,mvNotifier,$http) {
    $rootScope.getUser = function(){
        var url = '/getUser';
        $http({method:'POST',url:url}).success(function(data,status,headers,config){
            if(status==200){
                $rootScope.user = data;
                var date = new Date(data.date);
                $rootScope.user.joinMonth=date.toUTCString().split(' ')[2];
                $rootScope.user.joinYear=date.getYear();     
            }
            else
                mvNotifier.error(data.reason);
        });
    };
});

现在,当在 Controller 中时,我正在尝试这个 -

angular.module('student').controller('ProfileController', function($scope,$http,$location,mvNotifier,$rootScope) {
    if(!$rootScope.user){
        $rootScope.getUser();
    }
    $scope.firstName = $rootScope.user.firstName;        
});

如果 $rootScope.user 已经设置,它就可以正常工作。但如果在这种情况下必须调用 $rootScope.getUser() ,则会出现错误 -

TypeError: Cannot read property 'firstName' of undefined

所以,我想知道可能是因为 getUser 是一个异步调用,如果是这样我该如何解决这个问题,如果不是我哪里出错了,请提出建议

最佳答案

你可以尝试这样的事情

$rootScope.getUser = function () {
    var url = '/getUser';
    return $http({
        method: 'POST',
        url: url,
        cache: true /* cache true so we don't have to get from server each time*/
    }).then(function (resp) {
        var data = resp.data;
        $rootScope.user = data;
        var date = new Date(data.date);
        $rootScope.user.joinMonth = date.toUTCString().split(' ')[2];
        $rootScope.user.joinYear = date.getYear();
        return $rootScope.user;
    }, function(err){
       alert('OOps server errror')
    });
};

在 Controller 中:

$rootScope.getUser().then(function(user){
    $scope.firstName = user.firstName;    
});

关于javascript - 观察 angularjs $rootScope 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27577284/

相关文章:

javascript - Angular js - 无法将 json 获取到 $rootScope 中

javascript - 如何从后端将变量传递到 $rootScope

javascript - PHP + Jquery 根据两个 Dropdown 更改 Textbox 的值

javascript - 引用错误 : Can't find variable error

javascript - 如何在 d3.js 饼图中显示百分比

css - 更改 Slick Carousel 的高度

javascript - 从 JSON 数据中以 Angular 填充多个下拉选择框

javascript - 将 css 样式应用于 Angular js 指令中的 div

javascript - 在 angularjs 中编写应用程序时,我遇到了 sintaxis 错误?

javascript - $rootScope.$emit 和 $on