好的,所以我对Angular很新...搞清楚事情......我遇到了一个时髦的问题。
所以我有一个控制器(X)基本上是一些简单对象的添加/更新/删除。
我有另一个非常简单的控制器(Y),但它与X完全分开。在这个控制器中我...错误控制...一个标题,其中包含一个X的下拉列表页。
我的问题是......如果我操纵X..i.e。添加另一个,然后我想刷新控制器Y中的下拉列表。我在控制器X中有一个方便的刷新方法,但是当它被调用时它会更新几个不同的范围变量。
我尝试过在X& X之间共享的服务是的,但范围的东西正在阻碍。据我所知,服务并不真正喜欢$ scope,因为它可以从多个不同的控制器调用,并且范围变得非常混乱。
我错过了什么?
答案 0 :(得分:0)
如果您确实需要全局变量,可以将其放在$rootScope
:
app.controller('xCtrl', ['$scope', '$rootScope', function ($scope, $rootScope) {
$scope.init = function(){
.......
$rootScope.globalVar = ......;
.......
}
$scope.change = function(){
.......
$rootScope.globalVar = ......;
.......
}
}]);
app.controller('yCtrl', ['$scope', '$rootScope', function ($scope, $rootScope) {
$scope.use = function(){
.......
$scope.localVar = $rootScope.globalVar;
.......
}
}]);
答案 1 :(得分:0)
将变量放在$ rootScope中可能是一种解决方案,但通常最好不要污染$ rootScope。
创建一个工厂来存储必须在多个控制器/组件之间使用的数据是可行的方法。
例如创建像这样的工厂:
app.factory('DataFactory',function(){
var data = [ { name: 'item1'},{ name: 'item2'},{ name: 'item3'}];
return {
data: data
};
})
在您可以在控制器中使用此数据后,只需注入此处的服务:
app.controller('MyCtrl', function($scope, DataFactory) {
$scope.data = DataFactory.data;
});
在两个控制器之间共享数据的工作plunker是here