2017-06-12 9 views
0

ソースの値をコンポーネント変数(event: Event)にバインドするために、観測可能なソースを購読しようとしています。RxJSのsubscribe()内のコンポーネント変数に値を割り当てます。

subscribe()関数に渡されたオブザーバ関数が正しく実行され、オブザーバブルが期待通りに到着したにもかかわらず、コンポーネント変数event: Eventは常に未定義です。

なぜこのようなことが起こり、この問題を解決するにはどうすればよいですか?

@Component({ 
    selector: 'event-detail', 
    template: ` 
     <div *ngIf="event"> <-- this will never evaluate to 'true' 
      ... 
     </div> 
    `, 
}) 
export class EventCenterDetailComponent implements OnInit { 
    event: Event; 
    subscription: Subscription; 

    constructor(
     private eventBus: EventBus 
    ) {} 

    ngOnInit() { 
     this.subscription = this.eventBus.event$.subscribe((event: Event) => { 
      this.event = event; <-- this assignment seems to have no effect on the component variable 
     }); 
     console.log(this.event); <-- this is 'undefined' 
    } 
+1

を修正する必要が未定義であることがわかります'); '' this.event = event'で正しく、 ''何か ''をコンソールに期待どおりに表示しますか?また、 'console.log(this.event); < - これは 'undefined'ですが、加入者関数が設定されたばかりで、おそらくまだ実行されていないので、その時点では 'undefined 'と自然に思えます(' ngIf'が最終的には関数が実行されるときに真)。 – acdcjunior

+0

@acdcjuniorに追加しました。テンプレートに

{{ event }}
を追加して、実際の値がfalseからtrueに変わるかどうか確認してください。 – Tamas

答えて

0

ここでの説明は、サブスクライブのeventが適切にダウンしていないことだけです。あなたはeventはあなたが

...subscribe((event: Event) => { 
    console.log(event); // this will print undefined most likely 
}); 

をブロック購読でそれを印刷しようとした場合、あなたはあなたが `にconsole.log( '何かを配置する場合と言っているあなたのEventBusサービス

関連する問題