【问题标题】:Angularjs: a factory to share data between controllersAngularjs:在控制器之间共享数据的工厂
【发布时间】:2014-05-27 09:07:13
【问题描述】:

我有一个包含多个视图的 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 使我的数据与共享工厂保持同步?

【问题讨论】:

    标签: javascript angularjs angularjs-scope


    【解决方案1】:

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

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

    或者,如果share 的结构不会 改变(总是有一个obj1),你可以做angular.extend($scope, share)。如果share 获得新属性,这是危险,在创建新控制器之前,范围不会看到这些属性。

    【讨论】:

    • 谢谢!我觉得很愚蠢,在某些时候...... :-)。但是,我确实将$scope.share = share 放在了控制器的开头...我想这并没有太大区别...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 2014-03-22
    • 1970-01-01
    • 2013-05-28
    • 2014-12-14
    相关资源
    最近更新 更多