2017-01-21 75 views
1

美好的一天!Angular2 Observable不是第一次開火

從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)); 
} 

分量代碼,它應該被更新。 (順便說一句組件是<router-outlet>內)

component: 
    private data: Array<Object>; 

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

任何人誰可以闡明什麼是錯的一些輕?

+0

控制檯中的任何錯誤? –

+0

你爲什麼使用'BehaviorSubject'? – AngularChef

+0

不,我沒有得到任何錯誤,並且在控制檯和網絡選項卡中,我可以看到請求和返回的數據。是的,我確實使用BehaviorSubject。 –

回答

1

它看起來像一個角度2中的錯誤。我有類似的問題,我找到了解決方法。這裏是。

component: 
private data: Array<Object>; 

constructor(private changeDetectorRef: ChangeDetectorRef) { } 

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

您必須手動注入changeDetector和火災數據變化後更改檢測。

希望它有幫助;)