2017-01-27 15 views
1

オブジェクトを反復しようとしています。私は、次の試してみました:ngForループトラフオブジェクト

パイプ:私のhtmlで

@Pipe({name: 'keys'}) 
export class KeysPipe implements PipeTransform { 
    transform(value, args:string[]) : any { 
    if (!value) { 
     return value; 
    } 

let keys = []; 
for (let key in value) { 
    keys.push({key: key, value: value[key]}); 
} 
return keys; 

}}

<div *ngIf="details"> 
<li *ngFor=" let entry of details| keys">   
{{entry.key}}, {{entry.value}} 
</li> 

そしてその作業が、それは私の全体のオブジェクトを示しています。 オブジェクトの特定のキーが必要です。 だから私は(これはこれで、配列を持つ目的であった、この方法は、そのオブジェクトのみ場合に動作していない)、このような何かを行うことができます。

<button ion-item *ngFor="let movie of movies?.results" (click)="goToDetails(movie.id)"> 
    <h2>{{movie.title}}</h2> 
{{movie.overview}} 
</button> 
+0

ない '{{entry.value.yourDesiredKey}}'の仕事をしていますか?あなたが特定のキーを必要とする場合、私は質問 – echonax

+0

を理解していません..ループ作業内の* ngIf = "entry.key ==条件"ですか? –

+0

それは動作しません:私はエラーを取得できませんnullのプロパティ 'タイトル'を読み取ることはできません。問題は、ngForが私のオブジェクト全体をループしていることです。私はちょうど特定の部分を示す必要があります。 ngForのように、{{entry.title}}のようなものを実行することで、その特定の部分をループすることができます。 – Mai

答えて

2

あなたが希望(いずれかのフィルターパイプを実装するか、引数を渡す必要がありますあなたのパイプにプロパティ名):

<li *ngFor=" let entry of details| keys:'name', 'value'"> 
//or 
<li *ngFor=" let entry of details| keys | filter"> 

for (let key in value) { 
    if(!Array.isArray(args) || args.length === 0 || args.indexOf(key) > -1) 
    keys.push({key: key, value: value[key]}); 
} 

<li *ngFor=" let entry of details| keys:'name'">   
{{entry.key}}, {{entry.value}} 
</li> 
+0

私はあなたの最初の行を使用しようとしましたが、考えられるすべての組み合わせを使用しましたが、何も表示されません。タイトルのみを表示したいのであれば、どうすればいいのですか?{{}}の間に何が来るべきですか?私はこれを初めて知り、それを理解することはできません。 – Mai

+0

は、 'args'を使って例を追加しました。 – kemsky

+0

それは動作しません。それはオブジェクト全体を表示します。オブジェクトを介してそのループを取り出すには、角度が間違っています。 – Mai