【发布时间】:2019-09-07 12:16:07
【问题描述】:
我创建了一个自定义控件,它实现了 ControlValueAccessor 并将该控件放入模板驱动的角度形式。
这是一种允许为某些活动设置开始和停止日期以计划它的表单,并且过去的开始日期无效。我有一个验证器,所以当我点击那个控件时它会显示一个错误。但是当用户打开一个页面时,他/她不会立即看到任何错误,因为用户需要单击该控件才能将其设置为聚焦状态。
我想做“简单”的事情 - 只是在过去日期时自动聚焦控件以使该控件显示错误。我遇到的问题是父组件中的ngAfterViewInit在控件中的writeValue()之前被调用。所以我可以设置焦点,但没有显示任何错误。如果我手动点击另一个字段广告然后返回 - 我看到错误。这个问题可以通过包装我的代码来解决,用于在一个函数中设置聚焦状态并以零间隔传递给 setTimeout。
当 ngAfterViewInit 被过早调用但没有可控/同步的方式在以后进行任何操作时,这不是我第一次遇到这样的问题。
有什么办法可以避免ngAfterViewInit中的setTimeout?
这是一个没有 setTimeout 的小例子,它表明 writeValue 在 ngAfterViewInit 之后被调用:https://stackblitz.com/edit/angular-ngafterviewinit-quirks
提前致谢!
【问题讨论】:
-
你试过 ngAfterViewChecked() 吗?
-
当然。第一次通话时问题相同。我需要哪个电话?这似乎是一个 hack。
-
我添加了一个小的 stackblitz 示例。