私はこれをかなりテストしたが、以下の理由が理解できない。問題は、@Input変数が到着し、ユーザーオブジェクトがサービスから取得された後、テンプレート内のngIfは「some random text」とユーザーオブジェクト値のどれも出力しないことです。 ngIfラインを<div *ngIf="userList">{{userList.firstName}} {{userList.lastName}}
で切り換えると、userList配列にはfirstNameとlastName要素もあります。何らかの理由で、promise関数getUserでそれを行うことはできないようです。私はconsole.logで約束の応答をテストしており、間違いなくサービスからデータオブジェクトを取得しています。チュートリアルではこのようなことがルーティングで行われていることは分かっていますが、ここで間違っていることが不思議なので、何が起きているのか理解できます。ngIfとPromiseが動作しない
import { Component, Input } from '@angular/core';
import { User } from './ViewModels/UserVM';
import { UserList } from './userList';
import { UserService } from './user.service';
@Component({
moduleId: module.id,
selector: 'user-form',
template: `
<div *ngIf="user">{{user.firstName}} {{user.lastName}} some random text</div>
`
})
export class UserFormComponent {
errorMessage: string;
user: User;
_selectedUser: UserList;
@Input()
set selectedUser(selectedUser: UserList) {
if (selectedUser) {
this._selectedUser = selectedUser;
this.getUser(selectedUser.id);
}
}
get selectedUser() { return this._selectedUser; }
constructor(private userService: UserService) { }
getUser(id: number) {
this.userService.getUser(id).toPromise()
.then(user => this.user = user)
.catch(err => this.errorMessage = err);
}
}
----- ----- UPDATE
私はユーザーオブジェクトが完全に平坦で姓と名ではないことを忘れ判明等user.Person.firstNameに実際に
ngOnInit()メソッドでOnInitを実装し、ユーザーを取得する必要があります。 –
私は実際にngOnInitを試しましたが、まだ設定されていない変数に関する問題がありました。だから私はセッター/ゲッターを試したのです – Crob
あなたは* ngIfを使う前にユーザーが存在することを確認する必要があります。これでPromiseをチェックすることができます。 –