0

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

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

文件1.js

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

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

文件2.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
}
4

2 回答 2

2

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

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

`

于 2015-01-26T09:18:11.917 回答
1

Ctrl1$rootScope.test 的值设置在 $scope.myFunc 里面。

问题是您没有调用该函数,因此test从未设置 $rootScope 中的属性。

您需要在Controller中直接调用$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.

每个应用程序都有一个根范围此处的文档

您将需要创建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
    }]);
于 2014-05-22T18:21:03.897 回答