我是新來的Angular 2,我面臨異步HTTP請求和與插值綁定的問題。Angular 2 - 內插和異步http請求綁定
這裏是我的組件:
@Component({
selector: 'info',
template: `<h1>{{model.Name}}</h1>`
})
export class InfoComponent implements OnInit {
model: any;
constructor(
private _service: BackendService
) { }
ngOnInit() {
if (this.model == null) {
this._service.observableModel$.subscribe(m => this.model = m);
this._service.get();
}
}
}
當模板被渲染,我得到一個錯誤,因爲「模式」尚未設定。
我解決了這個問題,這很醜陋的黑客:
@Component({
selector: 'info',
template: `
<template ngFor #model="$implicit" [ngForOf]="models | async">
<h1>{{model.Name}}</h1>
</template>
`
})
export class NeadInfoComponent implements OnInit {
models: Observable<any>;
constructor(
private _service: BackendService
) { }
ngOnInit() {
if (this.models == null) {
this._service.observableModel$.subscribe(m => this.models = Observable.of([m]));
this._service.get();
}
}
}
我的問題是:如何到我的HTTP調用完成推遲模板渲染或如何在模板而不直接結合插值「模型」值到另一個組件?
謝謝!
謝謝馬克!貓王做到了!但我還不明白渲染流程。每當組件屬性發生任何變化時,都會呈現模板? –
@TonyAlexanderHild,在角度變化檢測期間(在每個事件之後運行),默認情況下,所有視圖/模板綁定都會被檢查髒,這意味着它們會被檢查是否有更改。當數據從服務器返回時,這是一個事件,所以更改檢測運行。 'model.Name'髒檢查發現已經改變,所以Angular更新了DOM。在Angular向瀏覽器返回控制權之後,它會看到DOM更改並更新我們在屏幕上看到的內容。 –
謝謝@MarkRajcok!現在很清楚。 –