ngFor

2017-12-07 3 views
0
を持つオブジェクトを印刷

私が引っ張っています対象:ngFor

enter image description here

オブジェクトの内容は、我々はデシベルから来るものを知らないので、異なる場合があります(私はそれがあまりにもレモンかもしれない意味)

私は私がそれが好きで印刷することができ、アレイにこのオブジェクトを変換ngfor.Ifを使用して、これを印刷しようとしています:

this.drops = Object.values(monster[this.randommnumber].drops); 

<li *ngFor="let drop of drops"> 
    {{ drop }} 
</li> 

これは 3を印刷しますリンゴとピクシを含まない5人。

私は何をしようとしていることは自分の名前でそれらを印刷している。(私はリンゴの意味:3、PIXI:5)

私は行うことができますオブジェクトを配列に変換し、ちょうど

<li *ngFor="let drop of drops"> 
     Apple:{{ drop.apple }} 
     Pixi:{{drop.pixi}} 
    </li> 
を記述することなく

しかし、データがリンゴではなくレモンを持っている場合はどうすればいいですか?あなたはそれを使用し、その後、HTMLテンプレートに直接

public getKeys(obj: string[]): any { 
     return Object.keys(obj); 
} 

Object.keysを使用することはできませんとしてプロパティ名を返すようにメソッドを書くObject.keys()

を使用する必要が

おかげ

答えて

0

そのようにオブジェクトを反復処理します。

<ul *ngFor="let key of getKeys(obj)"> 
    <li> {{key}}: {{obj[key]}} </li> 
</ul> 

Demo

それとも、あなたはまた、ハッキングの一種である以下、(推奨されません)

_obj: any = Object; 
myObj = { 
    apples: 2, 
    oranges: 3 
} 

し、HTMLで、

<li *ngFor="let key of _obj.keys(y)"> 
    {{ key }} : {{ myObj[key] }} 
</li> 

Demo

+0

fun fact:getKeysの中にconsole.logを入れて、angular呼び出し回数を確認してください。あなたは式の中で決して関数を使うべきではありません。なぜなら、それはすべての変更検出サイクルで呼び出されるからです。将来のパフォーマンス問題につながる可能性があります – SebOlens

0

それはだ行うことができますかなり単純で、キー値のペアとしてマップするだけです。

Component({ 
    selector: "app-root", 
    template: ` 
    <li *ngFor="let drop of drops"> 
    {{ drop.key }} : {{drop.value}} 
</li> 
    `, 
    styles: [] 
}) 
export class AppComponent { 
    drops: any; 
    _drops = { 
    apples: 5, 
    pixies: 6, 
    lemons: 7 
    }; 

    constructor() { 
    this.drops = Object.keys(this._drops).map(x => { return { key: x, value : this._drops[x] } }); 

    } 
} 

また、より洗練されたソリューションを見つけようとします。私はあなたがそれに余分なフィールドを使わずに作ることができると確信しています。

+0

'_drops'が変更/再割り当てされた場合はどうなりますか? – cyberpirate92

+0

コンストラクタからのコードをパイプに移動する必要があります – SebOlens