Angular 更改值访问器初始化后没有NgControl的提供程序
我已经创建了一个带有值访问器的自定义输入控件 这是我以前的代码Angular 更改值访问器初始化后没有NgControl的提供程序,angular,angular-forms,form-control,controlvalueaccessor,Angular,Angular Forms,Form Control,Controlvalueaccessor,我已经创建了一个带有值访问器的自定义输入控件 这是我以前的代码 @Component({ selector: "app--input", templateUrl: "./app-input.component.html", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AppInputComponent), multi: true } ] }
@Component({
selector: "app--input",
templateUrl: "./app-input.component.html",
providers: [
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AppInputComponent), multi: true }
]
})
我想访问表单控件,所以我改变了逻辑
@Component({
selector: "app--input",
templateUrl: "./app-input.component.html",
styleUrls: ["./app-input.component.scss"]
})
export class AppInputComponent implements ControlValueAccessor, OnChanges {
controlDirective: any;
constructor(@Self() public controlDir: NgControl) {
//this.checkValidation();
controlDir.valueAccessor = this;
}
ngOnInit() {
this.controlDirective = this.controlDir.control;
}
}
我的问题是,我使用这个输入只是在一些不包含任何表单的地方显示值。所以我使用一个输入参数来设置这个输入中的值
我用的是第一种方法
但当我把逻辑改为上面的时候,没有ngModel或formControlName,它给了我下面的错误
ERROR Error: Uncaught (in promise): Error: Template parse errors:
No provider for NgControl
如何在此实现中避免此错误?是否已在AppModuleYes中导入
FormsModule
。与此无关。当我在没有ngModel或formControl的情况下使用此控件时,它会给我这个错误。如果NgControl是可选的,您可以使用构造函数(@Optional()@Self()public controlDir:NgControl)
,但请记住每次要使用变量时都要选中if(controlDir)
,我真的不知道如果没有[(ngModel)]或[formControl]或formControlName,如何显示值