2014-09-11 4 views
0

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

Предположим, у вас есть ControllerA, который имеет метод:

ControllerA.executePromise()

Когда обещание finishs я хочу, чтобы предупредить службу, что это делается.

Затем я хочу предупредить ControllerB через службу, что обещание от ControllerA закончено.

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

+1

Наблюдая за услугу (или значение, которое вы заинтересованы в) с $ часы должны делать, если вызов executePromise находится в пределах цикл дайджеста. – Erpheus

+1

Вы можете использовать $ broadcast из $ rootScope, чтобы передавать данные из сервисов в контроллеры (или где-нибудь действительно) http://stackoverflow.com/questions/14502006/scope-emit-and-on-angularjs – SoluableNonagon

ответ

0

Я рекомендую вам всегда делиться данными между контроллерами (а также директивами) с помощью службы/фабрики и вводить их с обеих сторон.

После этого просто используйте функцию разрешения обещаний, чтобы обновить значение услуги.

app.factory('SharedService', function() { 
    return { 
    sharedObject: { 
     value: '', 
     value2: '' 
    } 
    }; 
}); 

app.controller('FirstCtrl', function($scope, SharedService) { 
    $scope.model = SharedService.sharedObject; 
}); 

app.directive('myDirective',['SharedService', function(SharedService){ 
    return{ 
    restrict: 'E', 
    link: function(scope){ 
     scope.model = SharedService.sharedObject; 
    }, 
    template: '<div><input type="text" ng-model="model.value"/></div>' 
    } 
}]); 

Вот это plunkr показывает, как это можно сделать: http://plnkr.co/edit/Q1VdKJP2tpvqqJL1LF6m

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