[英]Angular 2 + typescript Can't find property on compile time
我正在嘗試在 angular 2 中構建自定義表單驗證方法。問題是,當我運行該項目時,出現以下錯誤:
Property 'controls' does not exist on type 'AbstractControl'.
但是如果我忽略它並繼續使用我的應用程序,我會看到驗證功能按計划工作。
還有其他人面臨這個問題嗎? 為什么我會收到此錯誤? 我正在加氣,這與打字稿有關,而不是與角度本身有關(我使用的是打字稿 2.0.3)。
這是我的代碼:
進口:
import {Injectable} from '@angular/core';
import {RegexService} from "./regex.service";
import {FormControl, ValidatorFn} from "@angular/forms";
自定義驗證功能:
requireGroupMinAmount(minPossibleAmount): ValidatorFn {
return (control: FormControl): string[]=> {
let requireCounter = 0;
if (!control)
return null;
controlsLoop:for (let formOptionKey in control.controls) {
for (let formOptionValue in control.controls[formOptionKey].controls) {
if (control.controls[formOptionKey].controls[formOptionValue].value)
requireCounter++;
if (requireCounter >= minPossibleAmount)
break controlsLoop;
}
}
return requireCounter >= minPossibleAmount
? null
: ["Please fill at least " + minPossibleAmount + " fields"];
}
}
提前致謝。
FormGroup
/字典controls
在派生類FormGroup
和FormArray
上定義。 因此,如果我們想要迭代FormGroup
(哪些controls
屬於字典類型) ,我們需要進行以下檢查:
if (control instanceof FormGroup)
{
controlsLoop:for (let formOptionKey in control.controls) {
...
}
}
只有當抽象控件是FormGroup
實例時,編譯器(甚至運行時)才會正確迭代
此外,我們必須確定,即將到來的值是AbstractControl
requireGroupMinAmount(minPossibleAmount): ValidatorFn {
//return (control: FormControl): string[]=> {
return (control: AbstractControl): string[]=> {
而不是子類型FormControl 。 只有抽象基類可以正確檢查它是否屬於它的某些子類型(例如 FormArray)
有調整的代碼片段( 檢查操場):
requireGroupMinAmount(minPossibleAmount): validatorFn{
return (control: AbstractControl): string[] => {
let requireCounter = 0;
if (!control)
return null;
if (control instanceof FormGroup) {
controlsLoop: for (let formOptionKey in control.controls) {
var childControl: AbstractControl = control.controls[formOptionKey];
if (childControl instanceof FormGroup) {
for (let formOptionValue in childControl.controls) {
if (childControl.controls[formOptionValue].value)
requireCounter++;
if (requireCounter >= minPossibleAmount)
break controlsLoop;
}
}
}
}
return requireCounter >= minPossibleAmount
? null
: ["Please fill at least " + minPossibleAmount + " fields"];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.