我创建了一个自定义控件,该控件实现ControlValueAccessor并将其放入模板驱动的角度形式。
该表格可以为某些活动设置开始和结束日期以进行计划,而过去的开始日期无效。我有一个验证器,因此当我单击该控件时它会显示错误。但是,当用户打开页面时,他/她不会立即看到任何错误,因为用户需要单击该控件以将其设置为焦点状态。
我想做“简单”的事情-只是在过去的日期自动聚焦控件,以使该控件显示错误。我遇到的问题是父组件中的 ngAfterViewInit 在控件中的 writeValue()之前被调用。所以我可以设置焦点,但是没有显示任何错误。如果我手动点击其他现场广告,然后返回-我看到错误。通过包装我的代码以在函数中设置焦点状态并以零间隔传递给setTimeout,可以解决该问题。
这不是我第一次遇到这样的问题,即 ngAfterViewInit 的调用时间过早,但是没有可控制/同步的方式可以在以后进行任何操作。
有什么方法可以避免 ngAfterViewInit 中的setTimeout?
这是一个没有setTimeout的小例子,它显示在 ngAfterViewInit 之后调用 writeValue :https://stackblitz.com/edit/angular-ngafterviewinit-quirks
谢谢!
答案 0 :(得分:0)
我认为“简单”的事情是打电话给switch (process.env.APP_ENV) {
case 'dev':
env_suffix = ".dev";
break;
case 'stage':
env_suffix = ".stage";
break;
case 'local':
env_suffix = ".local";
break;
}
require("dotenv").config({
path: path.join(__dirname + "/../", ".env" + env_suffix)
});
而不仅仅是关注它。请务必在process.env
updateValueAndValidity
如果您不想在父项中引用控件,则有另一种解决方案,在另一个SO问题中对此进行了解释:setValidators in custom control without from reference in Angular