2016-11-14 68 views
2

縮小plunkr:https://plnkr.co/edit/gGCiYjcq70xaewn3n22F?p=preview角2不能設置默認值

@Input() model: any; 

propagateChange = (_: any) => {}; 

registerOnChange(fn) { 
    this.propagateChange = fn; 
} 

registerOnTouched() {} 

writeValue(value: any) { 

    if (value !== undefined) { 
    this.model = value; 
    } 
} 

ngOnInit() { 

    // Sets the model properly, but it doesn't show up in the view or outside of the component 
    if (!this.model && this.isRequired) { 
    this.model = options[0]; 
    } 

    this.propagateChange(this.model); 
} 

用法:

<form #myForm="ngForm"> 
    <custom-select #fuel="ngModel" [(ngModel)]="model.fuel" [options]="fuels" [isRequired]="true" name="fuel"></custom-select> 
</form> 

我自定義選擇實現ControlValueAccessor,但我不能當組件首先在ngOnInit方法中初始化時,讓它設置一個默認值。 model已正確設置在組件內部,但未反映在組件的視圖中或外部。但是,如果我然後通過選擇其他選項來改變它的價值。有沒有人知道這是爲什麼?

+0

我想這是一個變化檢測問題,因爲'ngOnInit()'從變化檢測調用。但我不知道如何解決它。 –

+0

@GünterZöchbauer這是一個無賴。真正重要的是讓這個工作嗯..如果你碰巧找到一個解決方案,我會獎勵你一個堅實的賞金。直到那時我想我將不得不嘗試一切嘗試.. – Chrillewoodz

+0

我沒有深刻的形式知識。也許是別人。 –

回答

2

您可以使用下面的方法做工作

@Output() ngModelChange = new EventEmitter(); 

ngOnInit() { 
... 
this.ngModelChange.emit(this.model); 
} 

https://plnkr.co/edit/VQJSDLU9TP2rVBmNeTNr?p=preview

+0

我做了@Input('ngModel')model:any;',這是否正確?如果我不這樣做,我不明白'model'可以如何連接到'中的'ngModel'?由於我添加了'ControlValueAccessor',因此輸入不再是'model',這意味着對組件中'this.model'的任何檢查理論上都不起作用,因爲輸入現在是'ngModel'。所以'@Input()模型:任何;'我不明白它如何仍然可以工作.. – Chrillewoodz