Angular 2 Typescript:TypeError:this.validator不是函数

Rub*_*ben 14 typescript angular

我正在使用ControlGroup构建一个表单,我正在其中加载一个类对象.但是我有一半时间遇到标题中提到的错误.有些表单会加载,有些表单则不加载.

我有一个像这样的类文件:

export class User {
    id: number;
    email: string;
    sign_in_count: number;
    created_at: string;
    first_name: string;
    last_name: string;
    birth_date: Date;
    news_letter: boolean;
    fb_id: string;
    gender: boolean;
    phone: string;
    picture: any;
}
Run Code Online (Sandbox Code Playgroud)

在我的UserDetailComponent中,我在控件中加载类,如下所示:

export class UserDetailComponent implements OnInit {
    user: User;
    userDetailForm: ControlGroup;

    constructor(
        private form: FormBuilder,
        private _userService: UserService,
        private _router: Router,
        private params: RouteSegment
    ) { }
    ngOnInit() {
        this.user = this._userService.getUser();
        if (this.user === undefined) {
            this._userService.getSingleUser(this.params.getParam('id'))
                .subscribe(data => (this.user = data, this.setForm()));
        } else {
            this.setForm();
        }
    }

    setForm() {
        this.userDetailForm = this.form.group(this.user);
    }
}
Run Code Online (Sandbox Code Playgroud)

在最后一行,我得到堆栈跟踪的错误:

browser_adapter.ts:78 TypeError: this.validator is not a function
    at Control.AbstractControl._runValidator (model.ts:146)
    at Control.AbstractControl.updateValueAndValidity (model.ts:128)
    at new Control (model.ts:282)
    at FormBuilder.control (form_builder.ts:32)
    at FormBuilder._createControl (form_builder.ts:66)
    at eval (form_builder.ts:50)
    at Function.StringMapWrapper.forEach (collection.ts:132)
    at FormBuilder._reduceControls (form_builder.ts:49)
    at FormBuilder.group (form_builder.ts:19)
    at UserDetailComponent.setForm (user-detail.component.ts:95)
Run Code Online (Sandbox Code Playgroud)

M K*_*M K 53

当我在表单构建器中以错误的方式绑定值数组时,我遇到了这个错误.

我做了什么:

fb.group({items: [1, 2, 3, 4]})
Run Code Online (Sandbox Code Playgroud)

怎么样:

fb.group({items: [[1, 2, 3, 4]]})
Run Code Online (Sandbox Code Playgroud)

你必须将所有东西都包装成一个数组,否则angular认为这[1, 2, 3, 4]是一个表单控件定义而不是表单控件值.

  • 啊! 当然,如果它是一个数组,则期望第二个值是一个验证器。本来需要我花很多时间来追踪。 (2认同)

C.M*_*.M. 7

当我从实现 Validator 的组件复制/粘贴,但未能删除新组件上的 NG_VALIDATORS 提供程序时,就发生了这种情况。