Angular2 Observable第一次没有开火

时间:2017-01-21 10:54:32

标签: angular angular2-services

美好的一天!

从RC5更新到最新版本后Angular2的一个小问题。 我正在使用服务在组件之间进行通信。该服务公开一个Observable以允许订阅,并在app.module中声明它。在控制台中,它似乎包含第一次点击的数据以及可用的订阅者。

现在,当我单击调用 fetch 方法的组件上的按钮时,没有任何反应。但是,如果我再次单击它,结果将成功显示。我在网上搜索但找不到答案。

使用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;
        });
    }

任何能够解决问题的人都可以解释一下?

1 个答案:

答案 0 :(得分:2)

它看起来像angular2中的一个bug。我有类似的问题,我找到了一个解决方法。在这里。

component:
private data: Array<Object>;

constructor(private changeDetectorRef: ChangeDetectorRef) { }

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

您必须注入changeDetector并在数据更改后手动更改检测。

希望它有所帮助;)