我有一個「控制值訪問」類從這裏「控制值訪問」 http://blog.rangle.io/angular-2-ngmodel-and-custom-form-components/角2:嵌套元素
export class ValueAccessorBase<T> implements ControlValueAccessor {
private innerValue: T;
private changed = new Array<(value: T) => void>();
private touched = new Array<() => void>();
get value(): T {
return this.innerValue;
}
set value(value: T) {
if (this.innerValue !== value) {
this.innerValue = value;
this.changed.forEach((f) => f(value));
}
}
touch() {
this.touched.forEach((f) => f());
}
writeValue(value: T) {
this.innerValue = value;
}
registerOnChange(fn: (value: T) => void) {
this.changed.push(fn);
}
registerOnTouched(fn:() => void) {
this.touched.push(fn);
}
}
我延伸在一個組件,類:
export class PricingComponent extends ValueAccessorBase<any> implements OnInit {
constructor() {
super(); // value accessor base
}
}
內部PricingComponent
使用ngModelGroup
的模板將多個輸入表單控件分組到一個對象中:
<div ngModelGroup="value">
<md-select [(ngModel)]="value.type" name="type">
<md-option *ngFor="let c of list" [value]="c.code">{{c.dsc}}</md-option>
</md-select>
<md-input-container>
<input [(ngModel)]="value.amount" name="amount" mdInput>
</md-input-container>
</div>
而且PricingComponent
這樣使用:
<form #form="ngForm">
<app-pricing name="prices" ngModel></app-pricing>
{{form.value | json}}
</form>
現在,我想從form.value
得到的是這樣的:
{ prices: { type: 'high', amount: 542 } }
但我發現了這個錯誤:
No provider for ControlContainer
這工作簡單。我還實施了它來解決與此問題無關的另一個問題:https://github.com/angular/angular/issues/9600#issuecomment-339298977 –