1

在实际提交之前,我有一个表单数据需要在不同的控制器之间共享。

我正在使用 module.value() 将数据保存为全局。

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

   serviceApp.value('GData',{});

我想知道这是最好的解决方案吗?

4

2 回答 2

2

应该为此目的使用模块。最好的选择是使用 a service,因为它用于在 Controller 之间共享持久数据。

var ControllerOne = function (someService) {

}

var ControllerTwo = function (someService) {

}

app.service('someService', function(){
    this.sayHello= function(text){
        return "Service says \"Hello " + text + "\"";
    };            
});

event使用scope

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]);
于 2013-10-18T13:18:01.963 回答
0

如前所述,一种方法,如本文所示:http ://www.objectpartners.com/2013/08/21/using-services-and-messages-to-share-data-between-controllers-in-angularjs/ 是将数据保存在服务中,并让每个控制器收到更改通知。

这意味着每个控制器都可能在其 $scope 中拥有自己的数据副本,以便他们的视图可以访问它。此外,您需要在服务中的 $rootScope 上调用 $broadcast,并在每个控制器中调用 $on 以确保数据保持同步。

我更喜欢的另一种方法是避免使用 $rootScope 进行广播,并通过简单地将数据保存在“应用程序”控制器中并让您的视图直接指向它来保持数据同步。视图仍然通过控制器的范围获取数据,但通过继承。您不必 $broadcast 或 $on 因为没有什么要保持同步,而且该服务是真正无状态的。服务获取数据的方式是将应用控制器范围内的对象传递给它的方法。

我从我提到的文章中分出了 plunk,并对其进行了修改以演示这种技术。我想你会发现生成的代码更小更容易理解。无论如何,这对我来说。我确实意识到其中一些是偏好问题。

http://plnkr.co/Ch1yJS

于 2014-03-29T15:42:47.080 回答