Angular 2 - Error: No provider for FormControl
Angular 2 - Error: No provider for FormControl
我正在为社区编写一个库,它需要访问表单控件并监听更改的值。
这是我之前使用 angular 2.3 和 4.0 时的做法。
export class ValidationMessageDirective implements OnInit {
@Input('validationMessage') customMessage: string;
constructor(private el: ElementRef, private formControl: NgControl, private validationMessageService: ValidationMessageService) {
this.target = $(el.nativeElement);
this.formGroup = this.target.closest('.form-group');
this.formControl.valueChanges.subscribe((newValue) => {
this.checkValidation();
});
}
}
但是升级到 angular 4.1 后,此代码不再有效。
这是我得到的错误:
ERROR Error: Uncaught (in promise): Error: No provider for NgControl!
我有什么建议或想法可以听取指令中更改的值吗?
更新 1:
这是我的 index.ts
import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { ValidationMessageDirective } from './src/ng2-validation-message.directive';
import { ValidationMessageService } from './src/ng2-validation-message.service';
export * from './src/ng2-validation-message.directive';
export * from './src/ng2-validation-message.service';
@NgModule({
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule
],
declarations: [
ValidationMessageDirective
],
exports: [
ValidationMessageDirective
],
})
export class Ng2ValidationMessage {
static forRoot(): ModuleWithProviders {
return {
ngModule: Ng2ValidationMessage,
providers: [ValidationMessageService]
};
}
}
你能试试这个吗?
import { ..., FormControlDirective, FormGroupDirective } from '@angular/forms';
@NgModule({
...
providers: [FormControlDirective, FormGroupDirective]
})
当输入不是表单控件时会出现此问题,因为我没有为输入提供 name
属性。
与 Angular 版本问题无关。
我正在为社区编写一个库,它需要访问表单控件并监听更改的值。
这是我之前使用 angular 2.3 和 4.0 时的做法。
export class ValidationMessageDirective implements OnInit {
@Input('validationMessage') customMessage: string;
constructor(private el: ElementRef, private formControl: NgControl, private validationMessageService: ValidationMessageService) {
this.target = $(el.nativeElement);
this.formGroup = this.target.closest('.form-group');
this.formControl.valueChanges.subscribe((newValue) => {
this.checkValidation();
});
}
}
但是升级到 angular 4.1 后,此代码不再有效。
这是我得到的错误:
ERROR Error: Uncaught (in promise): Error: No provider for NgControl!
我有什么建议或想法可以听取指令中更改的值吗?
更新 1:
这是我的 index.ts
import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { ValidationMessageDirective } from './src/ng2-validation-message.directive';
import { ValidationMessageService } from './src/ng2-validation-message.service';
export * from './src/ng2-validation-message.directive';
export * from './src/ng2-validation-message.service';
@NgModule({
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule
],
declarations: [
ValidationMessageDirective
],
exports: [
ValidationMessageDirective
],
})
export class Ng2ValidationMessage {
static forRoot(): ModuleWithProviders {
return {
ngModule: Ng2ValidationMessage,
providers: [ValidationMessageService]
};
}
}
你能试试这个吗?
import { ..., FormControlDirective, FormGroupDirective } from '@angular/forms';
@NgModule({
...
providers: [FormControlDirective, FormGroupDirective]
})
当输入不是表单控件时会出现此问题,因为我没有为输入提供 name
属性。
与 Angular 版本问题无关。