我有这个FormGroup
defaultIdNumberValidator = [Validators.required, Validators.minLength(6),
Validators.maxLength(11)];
this.registerForm = this.formBuilder.group({
permissions: this.formBuilder.group({
country: ['', [Validators.required]],
identityNumber: [null, this.defaultIdNumberValidator],
}, {validator: [this.validateId]})
});
我希望根据identityNumber
方法中的某些条件清除并向this.validateId
添加验证器。
validateId(input: AbstractControl) {
if(condition) {
input.get("identityNumber").clearValidators(); //this is working
}
if(condition) {
input.get("identityNumber").setValidators(this.defaultIdNumberValidator); //not working
}
}
当调用setValidators
方法时,我收到此错误(第109行是调用setValidators
的行)
ERROR TypeError: Cannot read property 'defaultIdNumberValidator' of undefined
at RegisterComponent.validateId (register.component.ts:109)
at eval (forms.js:742)
at Array.map (<anonymous>)
at _executeValidators (forms.js:742)
at eval (forms.js:694)
at eval (forms.js:742)
at Array.map (<anonymous>)
at _executeValidators (forms.js:742)
at eval (forms.js:694)
at eval (forms.js:742)
更新:
我重新启动开发服务器,现在我收到此错误
ERROR TypeError: Cannot read property 'setValidators' of undefined
at RegisterComponent.validateId (register.component.ts:109)
at eval (forms.js:742)
at Array.map (<anonymous>)
at _executeValidators (forms.js:742)
at eval (forms.js:694)
at eval (forms.js:742)
at Array.map (<anonymous>)
at _executeValidators (forms.js:742)
at eval (forms.js:694)
更新2:
我创建简单的plunker来重现错误。如果您首先单击输入而不是单击其他位置,则会在其下面出现错误。因此,当输入值的长度> = 2时应该删除此错误,并且当> = 5时应该再次可见。我也不知道为什么当输入值的长度为3而不是2时错误消失。
答案 0 :(得分:5)
您需要Public Sub TestMe()
Dim myCellH As Range
Dim myCellV As Range
Dim DataRange As Range
Dim o As Long
Set DataRange = Range("A1:A10")
For Each myCellH In DataRange.Cells
If InStr(myCellH, "animals") <> 0 Then
Set myCellV = myCellH
Do Until myCellV.Font.ColorIndex = 50
myCellV.Value = myCellV.Value & o
o = o + 1
Set myCellV = myCellV.Offset(0, 1)
Loop
End If
Next
End Sub
来保留bind(this)
的上下文。您还需要使用this
来更新要更新的验证程序。在那里我们还需要不发出一个事件,如果你是这样,这种情况会循环,直到你的浏览器崩溃。所以改变以下内容:
updateValueAndValidity
并且验证器看起来像这样:
}, {validator: this.validateId.bind(this)})