将来自多个控制器的AngularJS范围对象组合到一个对象中

时间:2015-02-01 21:39:50

标签: javascript angularjs angularjs-scope

我的应用程序由几个控制器组成。它们中的每一个都将不同的数据收集到其scope对象中。现在,我正在改变处理数据的方式,因此分离数据不再是一个选项(目标是将数据发送到PHP脚本进行PDF转换)。

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

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

它应该是新的控制器,服务还是别的什么?

1 个答案:

答案 0 :(得分:2)

无需复杂化,这是服务(或工厂)的完美用途。服务是单件,所以你不必担心从每个控制器实例化同一个 - 只需创建一个功能,将所有控制器中的数据分组和收集,你就可以了。

每个控制器也可以访问这些数据,因此将其发送给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>
&#13;
&#13;
&#13;