Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不触发'的情况下在angular 2上实现输入验证的ngOnChanges;表达式在选中后已更改;错误_Angular_Typescript_Components - Fatal编程技术网

如何在不触发'的情况下在angular 2上实现输入验证的ngOnChanges;表达式在选中后已更改;错误

如何在不触发'的情况下在angular 2上实现输入验证的ngOnChanges;表达式在选中后已更改;错误,angular,typescript,components,Angular,Typescript,Components,我尝试编写自己的自定义组件,该组件使用regex进行基本验证,可以作为组件的输入。有两种情况,一种是表单最初为空(新项目表单),另一种是数据准备就绪(编辑) 问题是,当我在初始设置数据后尝试验证字段时,通常会得到“表达式在检查后已更改”。我明白为什么要做这个检查,为什么会出错,但我不明白这是什么意思 如果无法更改组件状态,则“ngOnChanges”?在这种情况下,状态更改为“isValid”布尔标志,这会导致组件边框变为红色 我尝试过以下方法: 此.changeDetect.detectCh

我尝试编写自己的自定义组件,该组件使用regex进行基本验证,可以作为组件的输入。有两种情况,一种是表单最初为空(新项目表单),另一种是数据准备就绪(编辑)

问题是,当我在初始设置数据后尝试验证字段时,通常会得到“表达式在检查后已更改”。我明白为什么要做这个检查,为什么会出错,但我不明白这是什么意思 如果无法更改组件状态,则“ngOnChanges”?在这种情况下,状态更改为“isValid”布尔标志,这会导致组件边框变为红色

我尝试过以下方法:

  • 此.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 
  }