我如何使用$rootScope存储变量在一个控制器,我想以后在另一个控制器访问?例如:
angular.module('myApp').controller('myCtrl', function($scope) {
var a = //something in the scope
//put it in the root scope
});
angular.module('myApp').controller('myCtrl2', function($scope) {
var b = //get var a from root scope somehow
//use var b
});
我该怎么做呢?
如果它只是“访问其他控制器”,那么你可以使用角常数,好处是;您可以添加一些全局设置或其他您想在整个应用程序中访问的东西
app.constant(‘appGlobals’, {
defaultTemplatePath: '/assets/html/template/',
appName: 'My Awesome App'
});
然后像这样访问它:
app.controller(‘SomeController’, [‘appGlobals’, function SomeController(config) {
console.log(appGlobals);
console.log(‘default path’, appGlobals.defaultTemplatePath);
}]);
(没有测试)
更多信息:http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/
在根作用域设置的变量通过原型继承可用于控制器作用域。
以下是@Nitish演示版本的修改版本,可以更清楚地显示两者之间的关系:
http://jsfiddle.net/TmPk5/6/
注意,rootScope的变量是在模块初始化时设置的,然后每个继承的作用域都有自己的副本,可以独立设置(change函数)。同样,rootScope的值也可以更新(myCtrl2中的changeRs函数)
angular.module('myApp', [])
.run(function($rootScope) {
$rootScope.test = new Date();
})
.controller('myCtrl', function($scope, $rootScope) {
$scope.change = function() {
$scope.test = new Date();
};
$scope.getOrig = function() {
return $rootScope.test;
};
})
.controller('myCtrl2', function($scope, $rootScope) {
$scope.change = function() {
$scope.test = new Date();
};
$scope.changeRs = function() {
$rootScope.test = new Date();
};
$scope.getOrig = function() {
return $rootScope.test;
};
});