2013-03-07 91 views
0

我们正在构建什么将成为一个大角度的应用程序。我们已经使用了大量的指令和服务,并有多达14个控制器。同步范围在angularjs

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

我建议使用专用于携带数据的服务。

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/试试。

这是很好的做法吗?

+0

请看看这个SO问题http://stackoverflow.com/questions/11252780/whats-the-correct-way-to-communicate-between-controllers-in-angularjs – Chandermani 2013-03-07 13:18:40

回答

2

为此使用服务绝对是一个好主意。您不必将这些对象视为服务,这只是Angular项目中的默认命名。一旦你的应用程序增长了,你可能最终会得到不同类型的对象的工厂(在你的例子中,状态对象,资源对象,助手对象等),名称“服务”变得有点太模棱两可。

我会谨慎对待像这样传递的原始状态对象。你应该在方法/ getter和setter中包装它的访问权限,以避免应用程序的不同部分在不应该的时候覆盖其他状态,这对于调试来说可能有点痛苦。

+0

感谢您的回答!但是我发现getters和setter有一个问题:双向绑定将被打破。我也不喜欢传递未指定的数据结构,但我找不到更好的方法去做。 – user983716 2013-03-07 14:55:45

+0

@ user983716:“双向绑定将被破坏”,为什么会被破坏?它仍然是同一个对象,您也可以在模板中绑定方法调用。如果你的意思是你不能在'ng-model'中使用它,那么这可能是一件好事,因为你可能想要在输入之前过滤输入,然后让它修改全局应用程序状态。 – 2013-03-07 15:19:03

+0

你100%正确。非常感谢! – user983716 2013-03-07 15:31:30