将来自多个控制器的 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>
我的应用程序包含多个控制器。他们每个人都将不同的数据收集到其 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>