2017-02-15 26 views
0

我剛學NG2反應形式與官方樣片:爲什麼反應形式,抽樣合格數據onvalueChanged但不使用它

https://angular.io/docs/ts/latest/cookbook/form-validation.html#!#live-example

看看定義的方法:onValueChanged(數據? :any){

哪裏可以傳遞數據,但它在方法中永遠不會被使用?

爲什麼然後訂閱它上面的一些行? =>

this.heroForm.valueChanges 
     .subscribe(data => this.onValueChanged(data)); 

任何人都可以解釋我請這個奇怪的代碼?

ngOnInit(): void { 
    this.buildForm(); 
    } 

    buildForm(): void { 
    this.heroForm = this.fb.group({ 
     'name': [this.hero.name, [ 
      Validators.required, 
      Validators.minLength(4), 
      Validators.maxLength(24), 
      forbiddenNameValidator(/bob/i) 
     ] 
     ], 
     'alterEgo': [this.hero.alterEgo], 
     'power': [this.hero.power, Validators.required] 
    }); 

    this.heroForm.valueChanges 
     .subscribe(data => this.onValueChanged(data)); 

    this.onValueChanged(); // (re)set validation messages now 
    } 


    onValueChanged(data?: any) { 
    if (!this.heroForm) { return; } 
    const form = this.heroForm; 

    for (const field in this.formErrors) { 
     // clear previous error message (if any) 
     this.formErrors[field] = ''; 
     const control = form.get(field); 

     if (control && control.dirty && !control.valid) { 
     const messages = this.validationMessages[field]; 
     for (const key in control.errors) { 
      this.formErrors[field] += messages[key] + ' '; 
     } 
     } 
    } 
    } 

    formErrors = { 
    'name': '', 
    'power': '' 
    }; 

    validationMessages = { 
    'name': { 
     'required':  'Name is required.XXX', 
     'minlength':  'Name must be at least 4 characters long.', 
     'maxlength':  'Name cannot be more than 24 characters long.', 
     'forbiddenName': 'Someone named "Bob" cannot be a hero.' 
    }, 
    'power': { 
     'required': 'Power is required.' 
    } 
    }; 
} 
+0

那真是無聊......有人想無緣無故地關閉這個合理的問題...... – Pascal

回答

0

也許作者想表明你可以訂閱數據來使用它,但它不是一個完全充實的例子。

不要擔心在這種情況下數據變量沒有被使用,它只是一個例子。它背後沒有額外的含義,在代碼的其他地方沒有副作用。

0

當 - this.rentApartmentForm.valueChanges.subscribe(data => this.onValueChanged(data));代碼示例不再查找並顯示validationMessages。驗證錯誤被識別,但沒有消息出現。 Typescript錯誤表示'數據'必須在兩個表達式中才能匹配。

但此代碼示例中有錯誤。在下面的表達式中, - 對於(control.errors中的const鍵),Typescript說「control.errors可能爲null」。

當這個表達式在代碼中時,頁面將不會加載(使用Angular 4.4.3)出現一些關於'可能爲null'的控制檯錯誤。當註釋掉時,頁面將加載,但不顯示validationMessages。在開發環境中,該行可以重新添加,一切正常,不會出現控制檯錯誤,並且會爲用戶顯示validationMessages。

東西搞砸了。任何人都知道需要做出什麼改變?

相關問題