2016-03-29 5 views
2

私は観察者にこだわることができません。私は、オブザーバブルを作成するコンポーネントを持っており、コールバックでオブザーバを捕まえます。しかし、後で、私はそのオブザーバーを得ることができません - 私は別のインスタンスのコンポーネントを持っているかのように。Angular2 Observerがなくなっている

例:私は別のコンポーネントからこれに加入している、と私はその最初のテスト値を得るか

import {Component} from 'angular2/core'; 
import {Observable} from 'rxjs/Observable'; 

@Component({ 
    selector: 'users-table', 
    templateUrl: './components/users/users-table.html', 
    // template: '<button (click)="popup({value: 2})">Clickme</button>' 
}) 
export class UsersTableComponent { 

    public userClicked$: Observable<any>; 
    public observer: any; 
    public thing: number; 
    constructor() { 

    console.log('Starting UsersTable component'); 
    this.thing = 1; 
    this.userClicked$ = new Observable(observer => { 

     this.thing = 2; 
     console.log('Observer received:', observer); 
     this.observer = observer; 
     this.observer.next('Val 1'); // I receive this in an outside component 
    }).share(); // This supposedly makes the observable *hot* 
    } 

    public handle(value) { 

    console.log('Value:', value); 
    console.log(this.userClicked$); 
    console.log('thing:', this.thing); // This is set back to "1 
    this.observer.next(user);  // this.observer is undefined 
            // so it fails here 
    } 
} 

注('val 1'

他の成分はngAfterViewInit」に加入し、聞いています"、基本的には次のようになります。

this.usersTableComponent.userClicked$.subscribe(val => { console.log('heard ya:' val); }); 

明らかなものがありませんか?私は何とかクリックしたハンドラーを直接使用して、そのクリックされたユーザーのことを渡すことはできますか? (テーブルの行)?

Angular2ベータ8

答えて

1

this.userClicked$.subscribe(...)が呼び出されたときにのみそのため、実行されnew Observable(observer => { ... })に渡されたコールバック、加入者なしにはthis.observerありません。

ただ、この場合には発光スキップ:

this.observer && this.observer.next(user); 
+0

まあ、私は別のコンポーネントからこれに加入しています - と私はその初期値を取得しています。私はそれを熱くしました、レーム更新。 – Zlatko

+0

'this.observer && this.observer.next(user);をチェックするだけで、あなたが購読者を持っていなければイベントを発行することはできません。 –

+0

ありがとうございます。私は、私が*購読することを明確にするために質問を編集しました。私が発行する最初の_Val 1_を取得します。私のテンプレートがコンポーネントの別のインスタンスを見ているかのように見えるので、後のものは送信されません。 – Zlatko

関連する問題