Angular2コードピースのプランカーを取り付けました。 JSONからフィールドを印刷したいのですが、最初はオブジェクトがnullであり、Promiseを介して入力されているため、印刷できません。
これは私のコンポーネントファイルです
import {Component, NgModule, OnInit} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
class MyData {
xyz : MySubData;
}
class MySubData {
name : string;
}
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
{{abc.xyz.name}}
</div>
`,
})
export class App implements OnInit {
abc : MyData = null;
constructor() {
this.name = 'Angular2'
}
ngOnInit() {
setTimeout(() => {
this.abc = new MyData();
this.abc.xyz = new MySubData();
this.abc.xyz.name = "Binita";
}, 2000);
}
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {}
テンプレートから{{abc.xyz.name}}
行を削除すると、正常に実行されます。
Promiseからデータを取得しているため(非同期呼び出し)、コードでタイムアウトを設定しました。
最初はabc
はnull
であると理解できますが、私のコードはabc.xyz.nameを見つけることができません。しかし、チェックするif条件を入れたくありません。 JSON内にいくつかのプロパティがあり、各プロパティがif条件を書き込むことができないためです。
Anglejs 1の以前では、abcがnullの場合、自動的に空の文字列に置き換えられました。 Angular2で同じことをしたいです。提案してください。
以下はプランカーです
Angularテンプレートでは、安全なナビゲーション演算子または実在演算子またはNull伝播演算子がサポートされています。 Componentクラスがあるとします
myObj:any = {
doSomething: function () { console.log('doing something'); return 'doing something'; },
};
myArray:any;
constructor() { }
ngOnInit() {
this.myArray = [this.myObj];
}
次のようにテンプレートhtmlファイルで使用できます。
<div>test-1: {{ myObj?.doSomething()}}</div>
<div>test-2: {{ myArray[0].doSomething()}}</div>
<div>test-3: {{ myArray[2]?.doSomething()}}</div>