2016-12-25 23 views
6

私は配列の既存のコンポーネントを表示したいが、それは動作しません、新しいコンポーネントが作成され、ngforで表示されていないと思われます配列は新しいコンポーネントが作成されるのが見えますが、デフォルト値ではなく、渡される現在の値ではありません。何が間違っていますか?角度2 ngforの配列の配列を表示

HTML:

<div #visualTextDiv class = "visual_text" [ngStyle]=setStyles()> 

    <div *ngFor="let lineCounter of visualDivArray"> 
    <app-visual-text-div></app-visual-text-div> 
    </div> 

</div> 

はtypescriptです:

if(this.visualDivArray.length < currentDivIndex+1){ 
    let newv = new VisualTextDivComponent() 
    this.visualDivArray.push(newv); 
    console.log("creating new " + this.visualDivArray.length); 
} 

this.visualDivArray[currentDivIndex].setData(textValue); 
+0

あなたは "その配列内の既存のコンポーネント" とは何を意味しています。 Angularは配列のコンポーネントをレンダリングしません。 –

+0

@GünterZöchbauerので、配列を持つことはできませんし、コンポーネントのインスタンスを作成し、それをngforでレンダリングする? – gggggguy

+0

そうは思わない。 'new VisualTextDivComponent()'はコンポーネントを提供せず、コンポーネントクラスのインスタンスのみを提供します。おそらく、このアプローチは、いくつかのアイデアを提供していますhttp://stackoverflow.com/questions/36325212/angular-2-dynamic-tabs-with-user-click-chosen-components/36325468#36325468 –

答えて

3

あなたVisualTextDivComponentオブジェクトの配列を作成しました。その配列をngForに渡します。そして、このようなあなたのapp-visual-text-divコンポーネントに、配列の各アイテムを渡す:

<div #visualTextDiv class = "visual_text" [ngStyle]=setStyles()> 
    <div *ngFor="let lineCounter of visualDivArray"> 
    <app-visual-text-div [curLineCounter]="lineCounter"></app-visual-text-div> 
    </div> 
</div> 

curLineCounterまたはいくつかのより良い名前、app-visual-text-divコンポーネント内の変数です。

AppVisualTextDiv.ts

import { Component, Input } from '@angular/core'; 

@Component({ 
    selector: 'app-visual-text-div', 
    templateUrl: './AppVisualTextDiv.html' 
}) 
export class AppVisualTextDiv{ 
    @Input() curLineCounter: { 
    'id': number, 
    'someValue': string, 
    }; 
} 

AppVisualTextDiv.html

<div id="{{curLineCounter.id}}"> 
    <span>{{curLineCounter.someValue}}</span> 
</div> 
<!-- or whatever your use case provides --> 
関連する問題