在Controller中访问$ rootScope时,AngularJS未定义或空引用

时间:2013-09-13 21:49:02

标签: javascript angularjs

AngularJS最新发布候选人:

我正在从模块的run函数中将一个javascript对象 - 称为 stuff 放入$ rootScope,我相信它应该阻止。这是代码:

'use strict';

/* App Module */

var app = angular.module('MyApp', ['ngRoute', 'API'])
    .run(function ($rootScope, API) {
        $rootScope.stuff = null;

        // call the API
        API.getStuff()
            .success(function(data){
                $rootScope.stuff = data;
            })
            .error(function(data){
                $rootScope.stuff = null;
            });

    });

现在,当我尝试从我的控制器访问$ rootScope的 stuff 属性时,我在 stuff 上收到“未定义或空引用”错误。代码如下所示:

'use strict';

app.controller('indexController',
    function ($scope, $rootScope, otherAPI) {
        var
            stuff = $rootScope.stuff;

        // call the other API
        otherAPI.getDifferentStuff(stuff.property)
            .success(function(data){
                    $scope.differentStuff = data;
            })
            .error(function(data){
                        // do some error handling stuff here
            });
    });

我知道run函数中的api调用是成功的,它正在为$ rootScope中的东西赋值。我的代码可以在这里看到任何明显的错误吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

API.getStuff是异步api调用(它看起来像)。在这种情况下,很可能你的控制器在异步调用返回之前被初始化,所以$ rootScope.stuff仍然等于null。如果您等到通话成功,那么您将拥有您的数据。