无法绑定 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 属性。感谢帮助