我一直在關注Angular 2開發指南。我碰到這個問題,一邊做9 Routing and Navigation Milestone 3Angularjs 2組件屬性undefined
我添加了一個函數getCrisis
,需要一個參數sn
。該函數異步返回Promise<Crisis>
。
crisis.service.ts
import {Injectable} from 'angular2/core';
import {CRISES} from './mock-crisises';
@Injectable()
export class CrisisService {
getCrisises() {
return Promise.resolve(CRISES);
}
// the | string token is a Pipe
getCrisis(sn: number | string) {
return Promise.resolve(CRISES).then(cries => cries.filter(c => c.serialNumber === +sn)[0]);
}
}
危機form.component.ts調用getCrisis
上ngOnInit
export class CrisisFormComponent implements OnInit, CanDeactivate{
public model: Crisis;
public origin: Crisis;
submitted = false;
active = true;
constructor(
private _service: CrisisService,
private _dialog: DialogService,
private _router: Router,
private _routeParams: RouteParams
) { }
ngOnInit() {
let sn = +this._routeParams.get('sn');
this._service.getCrisis(sn).then(crisis => {
if (crisis) {
console.log(crisis) // debug output
this.origin = new Crisis(crisis);
this.model = crisis;
}
else {
this.gotoCrisisCenter();
}
});
}
危機form.component.html
<h1>Crisis Form</h1>
<form *ngIf="active" (ngSubmit)="onSubmit()" #crisisForm="ngForm">
{{diagnostic}}
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" required [(ngModel)]="model.name" ngControl="name" #name="ngForm">
<div [hidden]="name.valid || name.pristine" class="alert alert-danger">
Name is required
</div>
</div>
<button type="submit" class="btn btn-default" [disabled]="!crisisForm.form.valid">Submit</button>
</form>
加載crisis-form component
時我得到了這個異常。 input
元素綁定到this.model.name
。由於某種原因,框架似乎發現this.model
爲undefined
。我在ngOnInit
函數中添加了一些控制檯調試輸出。在異常消息後它們出現在控制檯的按鈕中。 Promise確實得到了正確解決,crisis
對象正確地分配給this.model屬性。
但是,框架發現this.model未定義,並且這些消息的順序出現在控制檯中。有可能當框架評估綁定時,由於異步過程,this.model還沒有被分配,這會導致異常?然後,Promise
解析並分配給this.model
,並將調試消息打印到控制檯。
Angular的live sample做同樣的事情,但他們沒有得到例外。請參閱app/crisis-centre/crisis-detail.component.ts
第37-46行的示例。
任何幫助將不勝感激。謝謝。
感謝您的回答。我錯過了示例html模板中的'* ngIf'指令。 –