【问题标题】:Sync scopes in angularjs [duplicate]在angularjs中同步范围[重复]
【发布时间】:2013-02-22 15:28:51
【问题描述】:

我们正在构建一个大型 Angular 应用程序。我们已经大量使用指令、服务并拥有多达 14 个控制器。

我们的问题是在控制器之间共享数据。我们希望能够在相距较远的控制器(不是兄弟)之间共享数据,并且不会破坏双向绑定。

我建议使用专门用于传输数据的服务。

var MyApp = angular.module('MyApp', []);

MyApp.factory('dataContainer', function(){ return {} });
function FirstCtrl($scope, dataContainer) {
    $scope.data = dataContainer;

}

function SecondCtrl($scope, dataContainer) {
    $scope.data = dataContainer;
}

你可以在小提琴http://jsfiddle.net/didier_/R2Bgs/2/试试。

这是好的做法吗?

【问题讨论】:

标签: angularjs


【解决方案1】:

为此使用服务绝对是个好主意。您不必考虑诸如服务之类的对象,这只是 Angular 项目中的默认命名。一旦您的应用程序增长,您可能最终会得到不同类型对象的工厂(如您的示例中的状态对象、资源对象、帮助对象等),并且“服务”这个名称变得有点含糊。

不过,我会谨慎对待像这样传递原始状态对象。您可能应该将对它的访问封装在方法/getter 和 setter 中,以避免应用程序的不同部分在不应该覆盖彼此的状态时覆盖彼此的状态,这可能有点难以调试。

【讨论】:

  • 感谢您的回答!但我发现 getter 和 setter 存在问题:双向绑定将被破坏。我也是,我不喜欢传递未指定的数据结构,但我找不到更好的方法。
  • @user983716:“双向绑定会被破坏”,为什么会被破坏?它仍然是同一个对象,您也可以在模板中绑定方法调用。如果您的意思是您将无法在 ng-model 中使用它,那么这可能是一件好事,因为您可能希望在修改全局应用程序状态之前过滤输入。
  • 你是 100% 正确的。非常感谢!
猜你喜欢
  • 2014-02-07
  • 2018-05-23
  • 2015-08-27
  • 2015-06-14
  • 2018-03-31
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多