2017-01-31 9 views
0

ngForからIDを渡してIDをドロップダウンに入力する方法を教えてください。角2はngFor内でメソッドを呼び出す

これは解析エラーの原因です。

<div class="container" style="width:100%; border:1px double"> 
    <div class="row left" *ngFor='let controls of tabControls'> 
     <div class="col-md-3 text-left" style="border:1px dotted"> 
      {{controls.DropDownTitle}} 
     </div> 
     <div class="col-md-9 text-left"> 
       <select [(ngModel)]="populateValues(controls.DrodownID)"> 
       //I will do this after populateValues which wil return an array of items 
        <option *ngFor="let item of items" [value]="item.id"> 
       {{ item.name }} 
       </option> 
       </select> 
     </div> 
    </div> 
    </div> 

出力 enter image description here

(私はngModelが進むべき道ではないですけど、私はただの例を示したかった)ので、私は月のドロップダウンのすべての値を取得するためにdropwdownidを渡す必要があります。

+0

'[(ngModel)] =" populateValues(controls.DrodownID) "は無効です。メソッドに双方向バインディングを使用することはできません。また、コントロールへのバインディングは意味をなさない。これは動作しないテンプレート駆動型とリアクティブ型の変わった組み合わせです。 https://angular.io/docs/ts/latest/guide/forms.html、https://angular.io/docs/ts/latest/cookbook/dynamic-form.html –

+0

動的フォームではありません。たとえば、Label:Month:Drodownのような動的なドロップダウンリストを取得するだけです。次に、ドロップダウンIDをメソッドに渡して、ドロップダウンの値を返すメソッドにします。 – rgoal

+0

@rgoal投稿したばかりのこの回答を見てください。これはほぼ同じことです。http://stackoverflow.com/a/41987524/6294072 – Alex

答えて

1

「私のドロップダウンに値を設定するメソッドを呼び出す」ということはよく分かりません。

あなたはこのような何かをする必要があります。これは、想定している

<select> 
    <option *ngFor="let item of items" [value]="item.id"> 
    {{ item.name }} 
    </option> 
</select> 

あなたが{id, name}オブジェクトの配列を保持items性質を持っています。

<option *ngFor="let item of getItems()" [value]="item.id"> 

しかし、それはあなたのコンポーネントのクラスからメソッドを呼び出し、プロパティに結果を格納する方が良いでしょう:

あなたがする必要がある場合は、テンプレートから直接アイテムを取得するメソッドを呼び出すことができます

export class MyComponent { 
    items: any; 
    ngOnInit() { 
    this.items = getItems(); 
    } 
} 
+0

あなたの答えの背後にある理由を記入する:配列プロパティを使って変更チェックが行われる方法のために、(最近挙動が変更されない限り)毎回機能を評価し、パフォーマンスに与える影響はずっと少なくなります。 – silentsod

+0

@silentsod:情報をいただきありがとうございます。私は、実際には 'getItems()'関数がテンプレートで直接使用されたときに何度も再評価されているのか疑問に思っていました。 – AngularChef

+0

上記のコードを更新しました。値を返すメソッドに値を渡してから、ngforを実行する必要があります。

関連する問題