在控制器之间共享范围变量的最佳实践是什么?

时间:2014-11-08 05:35:00

标签: javascript angularjs

我有一系列变量(我称之为 ArrVar ),这些变量可通过服务提供给所有控制器。此变量已作为 $ scope.ArrVar CtrlA 中指定为范围变量。如果用户切换 CtrlA 下的按钮,则附加到 CtrlA 的方法将更改 $ scope.ArrVar ,更新服务中的变量,并使用ng-repeat显示列表。

但是我有一个完全独立的控制器, CtrlB ,它需要更改 CtrlA 下的范围变量,该变量无法从 CtrlB访问

我可以想到两个解决方案:

  1. 全局控制器
  2. 在根范围分配变量
  3. 但这两种方法似乎都不是最好的做法。这样做还有其他优雅的方式吗?两个控制器完全不同,因此合并不会。

1 个答案:

答案 0 :(得分:1)

如果您共享特定于obj 的数据(如元素位置data.msg),它将与没有观看或任何内容的服务绑定。

2 controllers plunker

app.controller('FirstCtrl', function($scope, Shared) {
  $scope.data = Shared;
})
.controller('SecondCtrl', function($scope, Shared) {
  $scope.data = Shared;
})
.factory('Shared', function() {
  return { msg : ['one','two','three'] }
});

   <div ng-controller="FirstCtrl">
      <input ng-model="data.msg"/>
      {{data}}
   </div>    
   <div ng-controller="SecondCtrl">
      <input ng-model="data.msg"/>
     {{data}}
   </div>