将来自多个控制器的 AngularJS 个作用域对象组合成一个对象

Combine AngularJS scope objects from several controllers into a single object

我的应用程序包含多个控制器。他们每个人都将不同的数据收集到其 scope 对象中。现在,我正在改变处理数据的方式,因此不再可以选择分离数据(目标是将数据发送到 PHP 脚本以进行 PDF 转换)。

话虽这么说,我需要一种方法来将它们全部通过 POST 发送,或者首先将它们组合成一个对象然后发送。

我刚刚了解到 angular.extend,但我不确定这是否支持组合来自不同控制器的对象,如果支持 - 它是如何以及在何处完成的?

它应该是一个新控制器、一个服务还是其他东西?

无需复杂化,这是服务(或工厂)的完美用法。服务是单例的,因此您不必担心从每个控制器实例化相同的服务 - 只需创建一个函数来分组并从所有控制器收集数据,您就可以开始了。

每个控制器也可以访问此数据,因此将其发送到 PHP 也不会成为问题。


简单示例:

angular.module('app', [])
  .controller('CtrlOne', function(myService) {
    myService.sendData('some data');
  })
  .controller('CtrlTwo', function(myService) {
    myService.sendData('even more data');
  })
  .service('myService', function() {
    var gatheredData = [];
    return {
      sendData: function(data) {
        gatheredData.push(data);
        alert('Current data: ' + gatheredData.join(', '));
      },
      getData: function() {
        return gatheredData;
      }
    }
  })
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
  <div ng-controller="CtrlOne"></div>
  <div ng-controller="CtrlTwo"></div>
</div>