2017-06-20 67 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>