2016-09-22 13 views
0

私は2つのページ、ページ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 
} 

これを解決する方法はありますか?ありがとう。コントローラBがまだ存在しない場合は、それがロードされていたら

+1

サービスに 'payData'を格納する必要があります。コントローラーが同時にアクティブにならない場合、イベントを使用することはできません(とにかく非常に脆弱です)。 –

+0

@JoeClay、スマート、良いアイデア! thanks –

答えて

0

、それはちょうどそれにアクセスする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'を使ってコントローラ間でデータを共有することは、長期的にはかなり維持できなくなる傾向があります。このため、Angularには、アプリケーションの周りで共有する必要があるロジック/データを含むサービスがあります。 –

+0

@JoeClay確かに、サービスを使うことは素晴らしい考えです –