在我们的Angular应用中,我们使用Telerik的控件,如:
<kendo-recurrence-editor [start]="startDate" (valueChange)="onRecurrenceChange($event)">
</kendo-recurrence-editor>
如果有人更改了此控件的输入值,则可以正确调用onRecurrenceChange
函数:
public onRecurrenceChange(e) {
this.recurrence = e;
...
}
现在,我们要做的下一步是验证此控件内的输入元素。
例如,如果输入的值无效,我们将输入的值重置为:
public onRecurrenceChange(e) {
...
var inputs = this.recurrenceEditorDiv.nativeElement.querySelectorAll("input");
inputs[3].value = 1;
}
该值已正确重置,因此在功能上似乎可以正常工作,但是同时我们收到了JavaScript错误:ExpressionChangedAfterItHasBeenCheckedError
。
似乎根本原因是我们通过在事件处理程序中自己操纵DOM来设置此输入值。
我试图在setTimeout()
中执行此操作,但这并不能解决问题。
所以我的问题是:我们可以通过哪种方式从TypeScript中操作DOM并更改输入元素的值,并使TypeScript保持快乐?
编辑:我创建了一个堆栈闪电,但是在这里我看不到Visual Studio中抛出的异常:https://stackblitz.com/edit/angular-x1wpld。如果您转到“每日”,并在“ x次出现之后”中输入999,它将重置为1。但是正如所说的,在Visual Studio中,我收到ExpressionChangedAfterItHasBeenCheckedError
错误。
您尝试过吗?
public onRecurrenceChange(e) {
setTimeout(() => {
...
var inputs = this.recurrenceEditorDiv.nativeElement.querySelectorAll("input");
inputs[3].value = 1;
},
0
);
}
在某些情况下,我似乎使用了它。我不使用Scheduler
组件。