2017-01-21 15 views
1

おはよう!角度2最初に発射しないことがわかります

RC5から最新バージョンに更新した後のAngular2の小さな問題です。 コンポーネント間の通信にサービスを使用しています。このサービスはObservableを公開してサブスクリプションを許可し、app.moduleで宣言されています。コンソールには、最初のクリックからのデータと利用可能なサブスクライバが含まれているようです。

のメソッドを呼び出すコンポーネントのボタンをクリックすると、何も起こりません。しかし、もう一度クリックすると結果は正常に表示されます。私はオンラインで検索しましたが、答えを見つけることができませんでした。

angular2 rc5では、アップデートまで同じコードが期待通りに機能していました。サービスから

パーツ:

items: Observable<Array<Object>>; 
private _data: BehaviorSubject<Array<Object>>; 

constructor(private http: Http) { 
    this._data = new BehaviorSubject(null); 
    this.items = this._data.asObservable(); 
} 

fetch(text: String) { 
    this.text = text; 
    let headers = new Headers(); 
    headers.append("Content-Type", "application/json"); 
    let options = new RequestOptions({ headers: headers }); 
    this.http.post(this._url, "...{}...", options) 
     .map((res: Response) => res.json()) 
     .subscribe(data => { 
      this._data.next(Object.assign([], data).items); 
     }, error => this.handleError(error)); 
} 

それが更新されるべきコンポーネント・コード。間違っているものにいくつかの光を当てることができ

component: 
    private data: Array<Object>; 

    ngOnInit() { 
     this.fetchService.items.subscribe(result => { 
      this.data = result; 
     }); 
    } 

誰でも(ところでコンポーネントは<router-outlet>の内部にありますか)?

+0

コンソールにエラーがありますか? –

+0

なぜあなたは 'BehaviorSubject'を使用していますか? – AngularChef

+0

いいえ、私はエラーが発生しないし、コンソールとネットワークのタブで私は要求と返されたデータを見ることができます。はい、私はBehaviorSubjectを使用します。 –

答えて

1

これは、angular2のバグのようです。私も同様の問題があり、回避策が見つかりました。ここにあります。

component: 
private data: Array<Object>; 

constructor(private changeDetectorRef: ChangeDetectorRef) { } 

ngOnInit() { 
    this.fetchService.items.subscribe(result => { 
     this.data = result; 
     this.changeDetectorRef.detectChanges(); 
    }); 
} 

changeDetectorを注入し、データ変更後に手動で検出を変更する必要があります。

希望する;)

関連する問題