Задать вопрос
WhatIsHTML
@WhatIsHTML
HTML программист

Как обновить scope с фабрики/сервиса?

В контроллере А отправляю запрос через фабричный метод, а затем хочу получить результат в контроллер Б. Проблема в том, что если запускаю фабричный метод по дефолту в контроллере А, сразу же при его инициализации, то почему-то event, который запускается $rootScope.$broadcast('hi', msg); не приходит в controllerB, а приходит только по нажатию на кнопку в контроллере А. Я пробовал обновляться и через $rootScope.apply() - не помогло. Как обновить scope в контроллере Б без клика на кнопку в контроллере А, а сразу же при запуске контроллера А?
Вот пример jsfiddle.net/ZvnbR/27
ControllerA
app.controller('ControllerA', ['Factory', '$scope', '$rootScope', function(Factory, $scope, $rootScope) {
  $scope.add = function() {
    Factory.send('new Message!'); //it works!
  }
  Factory.send('new Message!'); //doesnt' work
}]);

ControllerB
app.controller('ControllerB', ['$scope', '$rootScope', function($scope, $rootScope) {
  $scope.$on('hi', function(event, msg) {
    console.log('event fired!');
    $scope.increment = msg;
  });
}]);

Factory
app.factory('Factory', function($rootScope) {
  var self = this;
  self.send = function(msg) {
    console.log('Factory method run');
    $rootScope.$broadcast('hi', msg);
  }
  return self;
});

Это упрощенный пример, в реальности я в фабрике получаю данные с сервера их нужно передать в scope.
  • Вопрос задан
  • 161 просмотр
Подписаться 2 Оценить Комментировать
Решения вопроса 1
RTW
@RTW
Форкаю, читаю, употребляю
Например есть такой грязный хак) $timeout принудительно делает apply на скоуп
jsfiddle.net/0p1p9x9e
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AMar4enko
@AMar4enko
Когда вы запускаете событие в контроллере А, контроллер B еще не инстанцировался
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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