美好的一天!
从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;
});
}
任何能够解决问题的人都可以解释一下?
答案 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并在数据更改后手动更改检测。
希望它有所帮助;)