如何在不触发'的情况下在angular 2上实现输入验证的ngOnChanges;表达式在选中后已更改;错误
我尝试编写自己的自定义组件,该组件使用regex进行基本验证,可以作为组件的输入。有两种情况,一种是表单最初为空(新项目表单),另一种是数据准备就绪(编辑) 问题是,当我在初始设置数据后尝试验证字段时,通常会得到“表达式在检查后已更改”。我明白为什么要做这个检查,为什么会出错,但我不明白这是什么意思 如果无法更改组件状态,则“ngOnChanges”?在这种情况下,状态更改为“isValid”布尔标志,这会导致组件边框变为红色 我尝试过以下方法:如何在不触发'的情况下在angular 2上实现输入验证的ngOnChanges;表达式在选中后已更改;错误,angular,typescript,components,Angular,Typescript,Components,我尝试编写自己的自定义组件,该组件使用regex进行基本验证,可以作为组件的输入。有两种情况,一种是表单最初为空(新项目表单),另一种是数据准备就绪(编辑) 问题是,当我在初始设置数据后尝试验证字段时,通常会得到“表达式在检查后已更改”。我明白为什么要做这个检查,为什么会出错,但我不明白这是什么意思 如果无法更改组件状态,则“ngOnChanges”?在这种情况下,状态更改为“isValid”布尔标志,这会导致组件边框变为红色 我尝试过以下方法: 此.changeDetect.detectCh
- 此.changeDetect.detectChanges(),在ngOnChanges之前和之后
- 将“text”更改为getter/setter对。移动验证登录到那里。同样的错误。我想这是 基本上与ngOnChanges相同,因此没有什么意外
- ngAfterViewInit不验证代码更新表单的情况(对于 例如,来自后端的查询结束->已填写编辑表单。)错误 然而,这并没有发生
- 将changeDetection策略设置为@Component decorator处的推送
- 超时。。。没有变化,如果我将超时设置为1秒以上,则不会发生任何情况,如果 发生的错误更少。这可能与开发模式检查有关 这似乎发生在初始变更检测后1秒
<cx-form-text-input validate=".+" label="Rekisterinumero*" [(text)]="ticket.registerPlate" format="uppercase"></cx-form-text-input>
错误:
EXCEPTION: Error in ./EditFormComponent class EditFormComponent - inline template:6:72 caused by: Expression has changed after it was checked. Previous value: 'true'. Current value: 'false'.
ORIGINAL EXCEPTION: Expression has changed after it was checked. Previous value: 'true'. Current value: 'false'.
ORIGINAL STACKTRACE:
ngOnChanges(更改:SimpleChanges){
this.validateData();//痛点。。。
this.changeDetect.detectChanges()//尝试了所有准备就绪,没有帮助。这样应该可以工作了吗?如果是这样,我想我的代码中可能有其他原因导致它。或者这是angular 2中的错误。但是我从2.1->2.4使用了它,仍然会发生这种情况。错误消息是关于EditFormComponent
,您问题中的代码显示为FormTextInputComponent
。我的只有当更改仅影响当前类的模型(FormTextInputComponent
)时,swer才起作用。您可以尝试注入private appRef:ApplicationRef
并调用this.appRef.tick()
.Hmm是的,这是一个很好的观点!如果明天我可以跟踪到EditFormComponent的链,并在验证后找出导致错误的原因,我将检查这一点。
EXCEPTION: Error in ./EditFormComponent class EditFormComponent - inline template:6:72 caused by: Expression has changed after it was checked. Previous value: 'true'. Current value: 'false'.
ORIGINAL EXCEPTION: Expression has changed after it was checked. Previous value: 'true'. Current value: 'false'.
ORIGINAL STACKTRACE:
ngOnChanges(changes: SimpleChanges) {
this.validateData(); // The painpoint...
this.changeDetect.detectChanges(); // <<<=== invoke change detection at the end of `ngOnChanges` if the model was modified
}