无法绑定 ngModel,因为它不是 "Component" 的 属性
Cannot bind ngModel since is not a property of "Component"
所以,我正在尝试在 angular 4 中制作一个自定义表单组件,我添加了 ngModel 工作所需的一切,但它没有。
这是我的子组件:
export class Search extends ControlValueComponent {
}
它扩展到处理所有 "ControlValueAccesor" 的 class ControlValueComponent。
这是 class ControlValueAccessor:
import {ControlValueAccessor, NG_VALUE_ACCESSOR} from "@angular/forms";
import {forwardRef, Input} from "@angular/core";
export class ControlValueComponent implements ControlValueAccessor {
@Input() disabled: boolean;
innerValue: any = '';
static providerValueAcessor( ref: any): any {
return [
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ref), multi: true }
];
}
onTouchedCallback: () => void = () => {};
onChangeCallback: (_: any) => void = () => {};
constructor() {
}
get value(): any {
return this.innerValue;
}
set value(v: any) {
if (v !== this.innerValue) {
this.innerValue = v;
this.onChangeCallback(v);
}
}
writeValue(value: any) {
if (value !== this.innerValue) {
this.innerValue = value;
}
}
registerOnChange(fn: any): void {
this.onChangeCallback = fn;
}
registerOnTouched(fn: any): void {
this.onTouchedCallback = fn;
}
}
为了获得提供者的权利,我像这样使用函数 ProviderValueAccessor(位于 ControlValueComponent 中)
providers: ControlValueComponent.providerValueAcessor(SysSearch)
但是当我将 [(ngModel)] 添加到我的子组件时,它不断收到错误消息,即 ngModel 不是组件的 属性
我尝试这样使用它:
<search [(ngModel)] = 'value'><search>
在您的 class 文件中导入 FormsModule:
import {ControlValueAccessor, NG_VALUE_ACCESSOR} from "@angular/forms";
---->
import {ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule} from "@angular/forms";
我已经解决了这个问题。
我需要直接在调用子组件的父组件上导入 FormsModule,以便 ngModel 工作...我是这样做的:
import {FormsModule} from "@angular/forms";
@NgModule({
imports: [
FormsModule,
SearchModule
]
这样,父组件就可以使用 ngmodel 属性。感谢帮助
所以,我正在尝试在 angular 4 中制作一个自定义表单组件,我添加了 ngModel 工作所需的一切,但它没有。
这是我的子组件:
export class Search extends ControlValueComponent {
}
它扩展到处理所有 "ControlValueAccesor" 的 class ControlValueComponent。
这是 class ControlValueAccessor:
import {ControlValueAccessor, NG_VALUE_ACCESSOR} from "@angular/forms";
import {forwardRef, Input} from "@angular/core";
export class ControlValueComponent implements ControlValueAccessor {
@Input() disabled: boolean;
innerValue: any = '';
static providerValueAcessor( ref: any): any {
return [
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ref), multi: true }
];
}
onTouchedCallback: () => void = () => {};
onChangeCallback: (_: any) => void = () => {};
constructor() {
}
get value(): any {
return this.innerValue;
}
set value(v: any) {
if (v !== this.innerValue) {
this.innerValue = v;
this.onChangeCallback(v);
}
}
writeValue(value: any) {
if (value !== this.innerValue) {
this.innerValue = value;
}
}
registerOnChange(fn: any): void {
this.onChangeCallback = fn;
}
registerOnTouched(fn: any): void {
this.onTouchedCallback = fn;
}
}
为了获得提供者的权利,我像这样使用函数 ProviderValueAccessor(位于 ControlValueComponent 中)
providers: ControlValueComponent.providerValueAcessor(SysSearch)
但是当我将 [(ngModel)] 添加到我的子组件时,它不断收到错误消息,即 ngModel 不是组件的 属性
我尝试这样使用它:
<search [(ngModel)] = 'value'><search>
在您的 class 文件中导入 FormsModule:
import {ControlValueAccessor, NG_VALUE_ACCESSOR} from "@angular/forms";
---->
import {ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule} from "@angular/forms";
我已经解决了这个问题。
我需要直接在调用子组件的父组件上导入 FormsModule,以便 ngModel 工作...我是这样做的:
import {FormsModule} from "@angular/forms";
@NgModule({
imports: [
FormsModule,
SearchModule
]
这样,父组件就可以使用 ngmodel 属性。感谢帮助