2016-09-22 4 views
0

Предположим, у меня есть две страницы, страница A и страница B, которые имеют контроллер A и контроллер B соответственно. Я иду на страницу А первый, и сделать операцию, которая будет вызывать $ вещать, чтобы отправить один объект:

$rootScope.$broadcast('payData', obj) 

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

export default class ControllerB{ 
    constructor($scope, $rootScope){ 
     this.scope = $scope; 
     this.rootScope = $rootScope 

     $rootScope.$on('payData', (event, obj) => { 
      console.log('broadcastPayData receive obj:', obj); 
     }) 
    } 
    //some other cool staff 
} 

Любая идея, как решить эту проблему? Благодарю.

+1

Вы должны хранить 'payData' в службе. Использование событий не будет работать, если контроллеры не будут активны одновременно (и в любом случае они вообще очень хрупкие). –

+0

@JoeClay, умный, хорошая идея! спасибо –

ответ

0

Если контроллер B еще не существует, она будет иметь смысл только сохранить объект rootScope и B будет получить доступ к нему, как только он будет загружен:

$rootScope.payData = obj 

Тогда просто использовать его в controllerB

export default class ControllerB{ 
    constructor($scope, $rootScope){ 
     this.scope = $scope; 
     this.rootScope = $rootScope 

     console.log($rootScope.payData); 
    } 
    //some other cool staff 
} 

Вы также можете посмотреть $rootScope.payData, если он может меняться со временем.

+1

Использование '$ rootScope' для обмена данными между контроллерами, как правило, довольно не поддается длительной работе. Вот почему у Углового есть услуги - содержать логику/данные, которые должны использоваться совместно с приложением. –

+0

@JoeClay Конечно, использование сервиса - отличная идея –

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

  • Нет связанных вопросов^_^