Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问控制器中的$rootSope时,AngualrJS未定义或空引用_Javascript_Angularjs - Fatal编程技术网

Javascript 访问控制器中的$rootSope时,AngualrJS未定义或空引用

Javascript 访问控制器中的$rootSope时,AngualrJS未定义或空引用,javascript,angularjs,Javascript,Angularjs,AngularJS最新版本候选: 我正在从模块的run函数将一个名为saystuff的javascript对象放入$rootScope中,我认为应该阻止它。代码如下: 'use strict'; /* App Module */ var app = angular.module('MyApp', ['ngRoute', 'API']) .run(function ($rootScope, API) { $rootScope.stuff = null;

AngularJS最新版本候选:

我正在从模块的run函数将一个名为saystuff的javascript对象放入$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中的东西赋值。有人能看到我的代码有什么明显的错误吗

谢谢你的帮助


Rich

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

你为什么不直接在控制器里打电话呢?把东西扔进根范围是不好的做法。如果您想在多个控制器中访问它,请创建一个服务并将其注入每个控制器。Zack,您能给我一个关于$rootScope使用的公认实践的好例子吗?它似乎是放置所有控制器所需的全局信息的地方,因为它们的作用域继承自$rootScope。为什么要麻烦地创建一个服务作为几个数据项的容器呢?谢谢你的帮助!谢谢,我相信你所说的是对的。显然,在包含的所有工作完成之前,run函数不会阻塞。