Наблюдение за изменениями между контроллерами в angular

У меня есть угловое приложение с двумя контроллерами. Вот упрощенная версия кода:

var app = angular.module('walkerApp', ['firebase']);

app.controller('AuthenticationController', function($scope) {
    function login(user) {
      ...
    }
});

app.controller('StepsDataController', function($scope) {

});

StepsDataController обслуживает данные из серверной части firebase. AuthenticationController обрабатывает управление пользователями. Когда текущий пользователь изменяется (с помощью методов входа или регистрации в AuthenticationController), StepsDataController должен выполнить повторную привязку к набору данных, специфичных для этого пользователя.

Как мне это сделать в Angular? Очевидно, мне нужна какая-то реализация наблюдателя, но я не уверен, что это за механизм.


person Yes - that Jake.    schedule 27.08.2014    source источник
comment
Хотя я не уверен, мне кажется, что StepsDataController должен быть службой, а не контроллером приложения - есть ли причина, по которой это контроллер?   -  person Izhaki    schedule 28.08.2014
comment
Вы можете использовать обработку событий или реализовать pub/sub, как в этом примере .   -  person PSL    schedule 28.08.2014
comment
Я упростил службу, которая должна знать, на какую часть куста данных смотреть, в зависимости от текущего пользователя, вошедшего в систему.   -  person Yes - that Jake.    schedule 28.08.2014
comment
Когда пользователь меняется с помощью контроллера аутентификации, вам нужно обновить другой контроллер? На самом деле у вас есть служба, которую StepsDataController использует для получения текущей информации о пользователе, и оба контроллера одновременно находятся на одной странице?   -  person PSL    schedule 28.08.2014


Ответы (1)


Вы всегда можете использовать $scope.$broadcast или $scope.$emit на контроллере объекта и $scope.$on на контроллере наблюдателя. Дополнительные сведения см. в документах.

Я не уверен, как области действия ваших контроллеров связаны с иерархией, но вы всегда можете использовать $rootScope.$broadcast.

person Izhaki    schedule 27.08.2014