Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 2 Typescript:TypeError:this.validator不是函数_Typescript_Angular - Fatal编程技术网

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

Angular 2 Typescript:TypeError:this.validator不是函数,typescript,angular,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:

我正在用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;
}
在我的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);
    }
}
在最后一行,我得到了stacktrace如下所示的错误:

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)

在构造函数中创建表单。当Angular在第一次尝试解析绑定时找不到表单时,它就不工作了


this.userDetailForm
只需使用空组或几个静态控件初始化即可。然后,当数据从服务器到达时,通过添加/删除控件和更新值来更新组。

当我以错误的方式在form builder中绑定值数组时,出现了此错误

我所做的:

fb.group({items: [1, 2, 3, 4]})
fb.group({items: [[1, 2, 3, 4]]})
应该是什么样子:

fb.group({items: [1, 2, 3, 4]})
fb.group({items: [[1, 2, 3, 4]]})

您必须将所有内容包装到一个数组中,否则angular会认为
[1,2,3,4]
是一个表单控件定义,而不是表单控件值。

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

您可能需要在构造函数中已经创建表单,并且只有当来自
UserService
的数据到达时才更新值(或添加/删除元素)。什么是FormBuilder?这是一个进口吗?@StianStandahl是的,这是一个进口的@angular/common-@GünterZöchbauer,我会试试的。Thanks@G谢谢你!这是可行的,唯一的问题是userDetailForm的dirty属性总是给出值false,即使您更改了一些信息..这!这是一种享受,让我们自己管理模型,而不必编写更多的代码(这会增加额外代码过时/需要测试的风险)。更好的解决方法。啊!当然,如果它是一个数组,它期望第二个值是一个验证器。如果使用对象填充formGroup,并且实体具有数组属性,则可以像这样包装数组
/@ts ignore
,后跟
entity.Property=[entity.Property]。然后
fb.group(entity)