AngularJS $ rootScope变量存在,但不可访问

时间:2014-05-22 18:05:21

标签: javascript angularjs scope rootscope

我在我的一个模块中设置了$ rootScope变量,现在想在另一个模块中访问相同的$ rootScope变量。到目前为止,我可以看到在两个模块中变量都已正确设置,但是当我尝试访问$ rootScope中的变量时,我只是未定义。

如何在不执行工厂/服务变通方法的情况下访问此变量?变量非常简单,$ rootScope应该足以满足我的需求。我在下面提供了一些通用示例代码来说明问题:

file1.js

var app = angular.module('MyApp1', []);

app.controller('Ctrl1', ['$scope', '$rootScope', function($scope, $rootScope) {
    $scope.myFunc = function() {
        $rootScope.test = 1;
    }
}

file2.js

var app = angular.module('MyApp2', []);

app.controller('Ctrl2', ['$scope', '$rootScope', function($scope, $rootScope) {
    $scope.need_to_access_this = $rootScope.test; // undefined
    console.log($rootScope); // returns JS object w/ test property set to 1
}

2 个答案:

答案 0 :(得分:2)

当我发现在控制器或服务加载之前已经为$ rootScope定义了这些属性时,我遇到了同样的问题。所以我做的是在应用程序运行时设置初始值。在你的情况下,它将像:

app.run(function($rootScope){
    $rootScope.test="variable";
})

`

答案 1 :(得分:1)

Ctrl1中,$ rootScope.test值在$ scope.myFunc中设置。

问题在于您没有调用该函数,因此永远不会设置$ rootScope中的test属性。

您需要在$scope.myFunc();中致电Ctrl1或在控制器中直接设置$rootScope.test = 1;

app.controller('Ctrl1', ['$scope', '$rootScope', function($scope, $rootScope) {
    $scope.myFunc = function() {
        $rootScope.test = 1;
    };

    $scope.myFunc();
}

app.controller('Ctrl1', ['$scope', '$rootScope', function($scope, $rootScope) {
    $rootScope.test = 1;
}

编辑:

以上建议仍然有效,因此您需要调用myFunc()。

但您的代码存在的问题是Ctrl1属于MyApp1Ctrl2属于MyApp2

每个应用都有一个根范围docs here

您需要创建Ctrl2作为MyApp1

的控制者
angular.module('MyApp1')
    .controller('Ctrl2', ['$scope', '$rootScope', function($scope, $rootScope) {
        $scope.need_to_access_this = $rootScope.test; // undefined
        console.log($rootScope); // returns JS object w/ test property set to 1
    }]);