2017-12-18 9 views
1

ng2-selectコンポーネントを使用して別のコンポーネントを拡張しています - 私はmy-dropdown-fieldと呼びました。ただし、何らかの理由でng2-selectコンポーネントがレンダリングされません。この問題は、ng2コントロールではなく、私が作成したラッパーコントロールにあるようです。私はしかし、これを引き起こしていることを把握することはできません。いずれかのエラーもスローされません。私がng2-selectを使用している場合は、それ自体が正常です。私は再現可能なスタックブリッツを作りました。角度コンポーネントがレンダリングされない

https://stackblitz.com/edit/ng2-select-angular2

これを実行する場合は、レンダリングされているいかなるNG2選択制御はありませんが表示されます。あなたはapp.component.htmlから下の部分をコメントアウトした場合:

上から

<form [formGroup]="myGroup" (submit)="showForm()"> 
    <my-dropdown-field 
    name="country" 
    [items]="items" 
    [selectedItem]="active" 
    formControlName="country"> 
    </my-dropdown-field> 
    <button (click)="showForm()">Show</button> 
</form> 

とのコメントを解除これは動作しません:

作品

<form [formGroup]="myGroup" (submit)="showForm()"> 
    <ng-select 
    name="country" 
    [(ngModel)]="active" 
    [(active)]="active" 
    [items]="items" 
    formControlName="country"> 
    </ng-select> 
    <button (click)="showForm()">Show</button> 
</form> 

次に、正常に動作することがわかります。私は何をしないのです

https://github.com/valor-software/ng2-select

:ここ

は、元NG2選択コンポーネントへのリンクですか?

答えて

1

あなたはNG2選択のを上書きしているので、あなたのコードは動作しません。プロパティitems。 当初はセッター(https://github.com/valor-software/ng2-select/blob/development/src/select/select.ts#L269)ですので、この行@Input() items: Array<string> = [];は元の動作に変更されています。

このような状況でこの問題を回避するには、このプロパティ(optionsobjects、など) ここで働いている例ControlValueAccessor` `実装https://stackblitz.com/edit/ng2-select-angular2-tof6ko?file=app/app.component.html

+0

はい、それは問題でした。また、bootstrap.min.cssを追加する必要がありました。 stackblitzが更新されました。 –

0

ngModelとリアクティブフォームで動作させる場合は、MyDropdownFieldComponentはControlValueAccessor を実装する必要があります。

[のSelectedItem]配列であるか、またはAppComponentで名前

を変更、ngOnInitでフォームを作成するべきではない代わりに、コンストラクタの

+0

' MyDropdownFieldComponent'が延び 'SelectComponent'に別の名前を使用することです。それを手動で再度実装する必要はありますか? 'selectedItem'は実際には' ng2-select'のドキュメントに従って配列です。 –

+0

私はあなたが再びインターフェイスを実装する必要はないと思うが、必要に応じてインターフェイスのメソッドをオーバーライドすることができます。 私は読んでいます:https://valor-software.com/ng2-select/ すべての入力と出力を二重チェックして、二重バインドを避けてください。 国:new FormControl( ''、[])は、ドロップダウンを初期化する必要があります。 :country:new FormControl( 'Australia'、[])を入力した場合。あなたのアクティブはオーストラリアです。あなたがコンソールログをそこに置いているなら、オーストラリアはwriteValueメソッドに表示されます。 – perseus

関連する問題