2015-02-01 3 views
0

Мое приложение состоит из нескольких контроллеров. Каждый из них собирает разные данные в свой объект scope. Теперь я изменяю способ обработки данных, поэтому разделение данных больше не является вариантом (целью является передача данных в скрипт PHP для преобразования PDF).Объединить объекты области AngularJS от нескольких контроллеров в один объект

Это, как говорится, мне нужно, чтобы они либо отправили их через POST в целом, либо чтобы они сначала были объединены в один объект, а затем отправлены.

Я только что узнал об угловом расширении, но я не уверен, поддерживает ли это объединение объектов, идущих от разных контроллеров, и если да, то как и где это делается?

Должен ли это быть новый контроллер, услуга или что-то еще?

ответ

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>

+0

Я до сих пор не понимаю, где это 'функция, которая будет группа и собрать данные из всех controllers' должны быть расположены? Я только что создал завод, и следующим шагом будет включение его во все контроллеры. Если бы у вас было больше деталей, это было бы здорово! Thx – developer10

+0

Вы можете ввести свою фабрику в каждый контроллер, который должен отправить материал, и делать это оттуда. Завод не имеет доступа к контроллерам, но контроллеры имеют доступ к заводу. – Shomz

+0

Мне так плохо, что ты пытаешься помочь, и я не понимаю весь процесс. Предположим, у меня есть пустой объект на заводе, а затем в моем первом контроллере я назначаю объект этого контроллера объекту фабрики. Затем во 2-х контроллерах я снова обращаюсь к фабричному объекту (который на этом этапе содержит данные от 1-го контроллера) и прикрепляет его данные к существующему заводскому объекту. Это может работать, если данные на заводе сохраняются между вызовами контроллера. – developer10

Смежные вопросы