2016-06-01 65 views
6

我正在用ControlGroup構建一個表單,並且在其中加載了一個類對象。不過,我遇到了標題中提到的錯誤的一半。有些形式會加載,有些則不會。Angular 2 Typescript:TypeError:this.validator不是函數

我有一個類文件,如下所示:

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) 
+1

您可能需要在構造函數中創建表單,並且僅在來自'UserService'的數據到達時才更新值(或添加/刪除元素)。 –

+0

什麼是FormBuilder?這是重要的嗎? –

+0

@StianStandahl是的,它是@ angular/common的導入 - https://angular.io/docs/ts/latest/api/common/FormBuilder-class.html – Ruben

回答

1

在構造函數中創建表單。當Angular在第一次嘗試解析綁定時找不到表單時,它不起作用。

this.userDetailForm只需要初始化一個空組或幾個靜態控件。然後,當數據從服務器到達時,通過添加/刪除控件和更新值來更新組。

23

我有這個錯誤,當我在表單生成器中的值的數組綁定錯誤的方式。

我做了什麼:

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

如何應該是:

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

您必須包裝的一切到一個數組,否則角度認爲[1, 2, 3, 4]表單控件定義而不是表格控制值

+0

這個!作品一種享受,讓我們Angular管理模型本身,而無需編寫更多代碼(與此附加代碼風險變得陳舊/需要測試)。更好的解決方法IMO。 –

+0

啊!當然,如果它是一個數組,它期望第二個值成爲驗證器。我花了很多時間來追蹤這一點。 – Joe

相關問題