2017-06-20 15 views
0

私の角度のプロジェクトでは、私は次があります。角度オブジェクトは、未定義

TS

this.storage.get(item_section).then((value) => { 
    this.item= value; 
    console.log(this.item); //The console log gives `["name","item","size"]` 
    console.log(this.item[1]); //Gives `item` as the console log 
}); 

HTML

<div class="something">{{item}}</div> //Displays "name,item,size" 
<div class="something">{{item[1]}}</div> //Gets Undefined error 

私はthis.itemを定義して得ることができる場合の結果について{{item}}、どうして{{item[1]}}の定義されていないエラーが発生しますか?

私はそれはそれはここでは正常に動作し、静的なデータのために働く必要があります

+2

あなたのコード非同期。考えてみてください – yurzui

+2

'item'は非同期操作が終了したときにのみ割り当て可能です。 'this.item = this.storage.get(item_section);'とテンプレート: '

{{resolvedItem[1]}}
のように、 > ' – developer033

+0

なぜ起こったのか知りたい場合は、[**この質問**]を見ることができます(https://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-それは機能の中で非同期#23667087)。 – developer033

答えて

2

あなたの操作は非同期で、これを試すことができますアイテムの2番目の要素にアクセスします。 * ngIfを使ってそれを達成することができます。

<div class="something" *ngIf="item">{{item[1]}}</div> 
+1

* "...最初の要素にアクセスするために読み込まれています..." *実際には、最初の要素にアクセスしたくないのですが、2番目の要素にアクセスしたくありません。 – developer033

1

にこの問題を解決する方法に少し混乱しています。

チェックDEMO

あなたのコードが非同期であるため、あなたがロードされるように項目を待つ必要があるので、別の方法として、あなたは、

<div class="something">{{item && item[0]}} 
2

「?」を追加するだけです。あなたの配列の項目の隣に、それは正常に動作するはずです。データが存在する場合は、セーフナビゲーションオペレータを参照してください。

+2

いわゆるセーフナビゲーションオペレータである。 – developer033

+0

私はそれを訂正しました。ありがとう:) @ developer033 –

+1

うわー、私はちょうど 'Safe Navigation Operator'がこのような状況をサポートしていないことを思い出しました。 ] 'あなたは" Template parse errors ... "を取得します。 – developer033

1

以下試してください。

<div class="something" *ngFor="let itm of item | async">{{itm}}</div> 
関連する問題