【发布时间】:2017-10-31 13:24:14
【问题描述】:
我使用一个数组来存储一组对象列表和一个包含灯光对象列表的数组。 我想显示 html 中的第一组以及该组的所有连接灯。之后下一组和相关的灯等等....
<div>
<ul>
<li *ngFor="let group of hueGroups">
{{group.name}}
<li *ngFor="let light of hueLights; let i = index">
{{hueLights[group.lights[i]].name}}
</li>
</ul>
</div>
export class AppComponent implements OnInit {
hueGroups:any[];
hueLights:any[];
constructor(){
this.hueGroups = [];
this.hueLights = [];
}
listAllGroups(){
for(var g in MyHue.Groups){ //MyHue.Groups returen an array with objects
console.log(g);
console.log(MyHue.Groups[g].name);
for(var id:number = 0; id < MyHue.Groups[g].lights.length; id++){
console.log("LightID:" + MyHue.Lights[MyHue.Groups[g].lights[id]].name); // Returns the name of the Lights
}
this.hueGroups.push(MyHue.Groups[g]);
}
listAllLights(){
for(var l in MyHue.Lights){ //MyHue.Lights returns an array with objects
console.log(MyHue.Lights[l]);
this.hueLights.push(MyHue.Lights[l]);
}
}
}
如果我尝试运行它,我会得到错误
无法读取未定义的属性“灯”
所以我认为嵌套 ngFor 的语法是错误的。应该可以从上面调用“组”。
编辑: 这是 MyHue.Groups 对象外观的重要部分:
{action:Object
class:"Living room"
lights: Array(2)
0:"3"
1:"1"
name:"Room1"}
在 Group 对象中只有依赖于该组的灯的 ID
这是灯光对象外观的重要部分:
{state: Object, type: "Extended color light", name: "Couch1", modelid: "LCT007"…}
如果我将孔数组打印到控制台,这就是我得到的结果:
Object {1: Object, 3: Object, 4: Object}
所以我必须匹配哪个Light ID在哪个Group中,然后检查light Object的名称
【问题讨论】:
-
您似乎正在尝试将
*ngFor与object一起使用。*ngFor仅适用于Arrays。您可以创建一个管道并使用*ngFor来迭代hueLights的键。 -
你有这方面的例子吗?我对 Angular 2 很陌生
-
包含
hueLights和hueGroups的内容,这样理解会更好。 -
好的,我把重要的部分包括在内了
-
你能包含一些示例对象吗?这应该可以通过一张地图解决