Задать вопрос

Angular.js, как передать данные из одного контроллера в другой?

Всем привет! Друзья, подскажите, как вы передаете данные из одного контроллера в другой? Я знаю два способа сделать это.

Первый способ: Сделать сервис, который будет содержать в себе общие объекты и методы чтения, записи для этих объектов. Например:
angular.module('myModule').service('myService', function(){
    var myData = [];

    this.add = function(person){
        myData.push(person);
    };

    this.get = function(){
        return myData;
    };

    this.clear = function(){
        myData.length = 0;
    }
});


Второй способ: подписаться в контроллере, которому нужно получить данные, на конкретное событие, а в контроллере-источнике поднять это событие. Пример:

$scope.$on('myEvent', function(event,args){
            $scope.myData.push(args);
        });

      $rootScrope.$broadcast('myEvent', myData);
  • Вопрос задан
  • 9382 просмотра
Подписаться 6 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
По умолчанию объекты из родительской области видимости доступны в дочерней. Так что даже обмениваться данными не нужно: вложенный контроллер просто видит данные всех вышестоящих контроллеров.

В тех редких случаях, когда нужно обмениваться данными с контроллерами вне иерархии пишется служба. Но эта служба содержит содержательные методы, а не методы типа "положить данные" или "забрать данные".

Как пример: служба вывода уведомлений на экран. Содержит методы для вывода уведомлений, которые взаимодействуют с контроллером, отображающим эти самые уведомления (в виде всплывающих окон в правом верхнем углу экрана, например). Клиенты этой службы, разумеется, ничего не знают о контроллере уведомлений. Им это просто не нужно.
Ответ написан
Комментировать
Satanpit
@Satanpit
Front-end developer
Лично я использую $rootScope.
Мне не понятно, зачем такие сложности с событиями?
Ответ написан
SayMAN83
@SayMAN83
Работаю в IT
Я только начал изучать Angularjs, и провел небольшой тест.
Имея приложение и несколько шаблонов. У меня несколько страниц.
Создал сервис, фабрику и рутскоп. Загнал им значения по дефолту.
Далее произвел действия, при которых всем трем объектам было передано соответствующее значение (с выводом в div).
Далее переключился на другой шаблон и вернулся обратно.
Фабрика и сервис значение сохранили значения, а рутскоп потеряло свое значение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы