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

Angularjs: a factory to share data between controllers

本文关键字:之间 控制器 共享 数据 工厂 一个 Angularjs      更新时间:2023-09-26

我有一个有多个视图的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?

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

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

或者,如果share的结构是NOT要改变(总是有一个obj1),你可以做angular.extend($scope, share)。这是危险的如果share获得了新的属性,这些将不会被作用域看到,直到一个新的控制器被创建。