我在我的一个模块中设置了$ 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
}
答案 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
属于MyApp1
且Ctrl2
属于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
}]);