![](/img/trans.png)
[英]How to share data between controllers in angular app in the right way
[英]best angular way to share data between different controllers
我有一个表单数据,需要在实际提交之前在不同的控制器之间共享。
我正在使用module.value()将数据保存为全局数据。
var serviceApp = angular.module('sampleservice', [ ]);
serviceApp.value('GData',{});
我想知道这是最好的解决方案吗?
你不应该使用的模块用于此目的。 最好的选择是使用service
因为它用于在Controller之间共享持久数据。
var ControllerOne = function (someService) {
}
var ControllerTwo = function (someService) {
}
app.service('someService', function(){
this.sayHello= function(text){
return "Service says \"Hello " + text + "\"";
};
});
或在scope
使用event
var ControllerOne = function($scope) {
$scope.$on('someEvent', function(event, data) {
});
}
var ControllerTwo = function($scope) {
$scope.$on('someEvent', function(event, data) {
});
}
$rootScope.$broadcast('someEvent', [1,2,3]);
如前所述,本文介绍了一种方法: http : //www.objectpartners.com/2013/08/21/using-services-and-messages-to-share-data-between-controllers-in-angularjs/是为了将数据保留在服务中,并通知每个控制器更改。
这意味着每个控制器可能会在$ scope中拥有自己的数据副本,以便其视图可以访问它。 此外,您需要在服务的$ rootScope上调用$ broadcast,在每个控制器中调用$ on,以确保数据保持同步。
我更喜欢的另一种方法是避免使用$ rootScope进行广播,而避免使用$ on来使数据保持同步,只需将数据保留在“ app”控制器中,并直接将其指向即可。 视图仍然通过控制器的作用域但通过继承来获取数据。 您不必进行$ broadcast或$ on,因为没有什么可以保持同步,并且该服务确实是无状态的。 服务获取数据的方式是通过将应用程序控制器范围内的对象传递给其方法。
我从我提到的文章中得到了分叉,并对其进行了修改以演示该技术。 我认为您会发现生成的代码更小且更易于理解。 反正对我来说。 我确实意识到其中有些是优先事项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.