2017-06-20 89 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]}}怎麼會出現undefined錯誤?

我有點困惑如何解決這個問題

+2

你的代碼異步的。試想一下 – yurzui

+2

'item'只能在異步操作完成時才能分配。你可以在組件中使用這樣的東西:'this.item = this.storage.get(item_section);'和in template:'

{{resolvedItem[1]}}
' – developer033

+0

如果你想知道它爲什麼發生,你可以看到[**這個問題**](https://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-afteri-i-修改 - 它-裏面對的一功能-asynchron#23667087)。 – developer033

回答

2

你的操作是異步,所以你需要等待項目被加載訪問項目的第二個元素。您可以使用* ngIf來實現它。

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

*「...被加載訪問第一個元素...」*事實上,他不想訪問**第一個**元素,但第二個:) – developer033

1

應該對靜態數據的工作,在這裏工作得很好。

檢查DEMO

或者因爲你的代碼是異步的,你可以試試這個,

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

只需添加'?'在陣列項旁邊,它應該可以正常工作。如果存在,請參考安全導航操作員顯示數據。

+2

它是稱爲「安全導航運營商」。 – developer033

+0

我修正了它,謝謝:) @ developer033 –

+1

嗯,我只記得'安全導航操作符'不支持這種情況(我的意思是括號表示法)......如果你嘗試:'item?[1 ]'你會得到一個「Template parse errors ...」。 – developer033

1

請嘗試以下:

<div class="something" *ngFor="let itm of item | async">{{itm}}</div>