30

这是我的对象(它有 n 个动态键。我在下面的示例中只显示了两个)

let obj = {
abc:["some text", "some more text"],
xyz:["more text", "what do you think?", "I'm tired now"]

}

这是我尝试循环抛出上述内容并打印所有值

 <div *ngFor='let item of obj ; let i = index;'>
            <p *ngFor="let value of obj.i">{{value}}
 </div>

但以上似乎不起作用。我做错了什么,正确的语法是什么?

4

3 回答 3

44

你可以这样做:

<li *ngFor="let o of obj">
   <p *ngFor="let objArrayElement of generateArray(o)"> {{objArrayElement}} </p>
</li>

generateArray看起来像:

generateArray(obj){
   return Object.keys(obj).map((key)=>{ return obj[key]});
}
于 2016-08-20T23:25:00.373 回答
26

对@eg16 的回答稍作修改,它对我来说就像一个魅力——

generateArray 函数看起来像这样-

generateArray(obj){
    return Object.keys(obj).map((key)=>{ return {key:key, value:obj[key]}});
}

和模板 -

<li *ngFor="let item of generateArray(data)">{{item.key}}: {{item.value}}</li>
于 2017-05-05T10:48:03.407 回答
19

从 6.1 版开始,Angular 提供了KeyValue 管道:

<li *ngFor="let item of (data | keyvalue)">{{item.key}}: {{item.value}}</li>

这使得以前使用 Object.keys 引用或其自己的实现的变通办法已过时。

于 2019-04-11T09:08:05.890 回答