Angularjs:一个在控制器之间共享数据的工厂

时间:2014-05-27 09:07:14

标签: javascript angularjs angularjs-scope

我有一个包含多个视图的angular.js应用程序,我需要在视图更改中保留状态 所以我使用一个非常简单的工厂来共享数据 而且,在控制器中,我使用工厂名称来使用我的数据,而不是“$ scope”:

app.factory('share', function() {
  return {};
}

app.controller('FirstCtrl', function ($scope, share) {
  share.obj1['a'] = 'ABC';
});

app.controller('SecondCtrl', function ($scope, share) {
  share.obj1['b'] = 'DEF';
  if (share.obj1['a'] === 'ABC') {
    ...
  }
});

而且,我简化的html视图是这样的:

...
<div ng-repeat="(key, item) in obj1">
  {{item}}
</div>
...

这当然不起作用,因为视图中的ng- *指令只能访问$ scope ...

是否可以使用$ scope使我的数据与共享工厂保持同步?

1 个答案:

答案 0 :(得分:4)

您可以在每个控制器的末尾执行$scope.share = share,当然也可以修改视图:

<div ng-repeat="(key, item) in share.obj1">

或者,如果share的结构要改变(总是有obj1),则可以执行angular.extend($scope, share)。如果share获取新属性,则危险 <> ,在创建新控制器之前,范围不会看到这些属性。