处理控制器之间的范围

时间:2015-05-12 02:34:25

标签: javascript angularjs

好的,所以我对Angular很新...搞清楚事情......我遇到了一个时髦的问题。

所以我有一个控制器(X)基本上是一些简单对象的添加/更新/删除。

我有另一个非常简单的控制器(Y),但它与X完全分开。在这个控制器中我...错误控制...一个标题,其中包含一个X的下拉列表页。

我的问题是......如果我操纵X..i.e。添加另一个,然后我想刷新控制器Y中的下拉列表。我在控制器X中有一个方便的刷新方法,但是当它被调用时它会更新几个不同的范围变量。

我尝试过在X& X之间共享的服务是的,但范围的东西正在阻碍。据我所知,服务并不真正喜欢$ scope,因为它可以从多个不同的控制器调用,并且范围变得非常混乱。

我错过了什么?

2 个答案:

答案 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