2017-05-26 9 views
2

私は角度の材料から<md-select>要素を使用するWebアプリケーションを持っています。オプションの値は、次のようにサービスによって提供されています。私は自分のアプリケーションの至る所に、このコードスニペットをコピーする必要がありますので、md-option要素を動的に生成することは可能ですか?

<md-option *ngFor="let option of settingsService.getOption(name)" [value]="option.description"> 
    {{option.description}} 
</md-option> 

のみ「名前」varibaleは異なる形に変化しています。このコードスニペットを名前で生成できる再利用可能なコンポーネントまたはディレクティブを作成したいと思います。私は全体の<md-select>をカスタムコントロール値アクセサーにラップしようとしましたが、この場合、内部フォームコントロール(md-selectのコントロール)はバリデーションの変更について通知されません。何らかの形でこれらのオプションを生成することは可能ですか?そうすれば、フォームコントロールをselect要素に置くことができますか?

答えて

1

短い回答:いいえ、動作しません。

md-selectMdOptionコンポーネントのインスタンスであるContentChildrenを直接の子として照会することで動作します。以下のように使用し、その後

@Component({ 
    select: 'foo-options', 
    template: ` 
     <md-option value="some">Some Value</md-option> 
    ` 
}) 
class AutoCompileOptionsComponent {} 

そして:カスタムコンポーネントを使用する場合

<md-select> 
    <foo-options></foo-options> 
</md-select> 

はこのようにそれをやったとき、それは即座に期待しているため、md-selectはそれがContentChildrenmd-optionコンポーネントとして「見る」ではないだろう子コンポーネントはMdOptionのインスタンスになります。

<md-select> 
    <div> 
     <md-option value="hah">Hah</md-option> 
    </div> 
</md-select> 
+0

私はこの答えを期待:

不思議なことには、カスタムコンポーネントを使用しない場合、それは仕事がありません。 :/私はmd-selectのコードを二重にチェックしました。あなたが上記で書いたのと同じ結論を得ました。私は別の方法を見つけなければならないが、明確化のためにありがとう。私はこの答えを受け入れるだろう。 –

関連する問題