初始化组件后,我试图在输入字段中选择一些文本。我知道我可以用http://my-remote-server.com:8000
来做到这一点,但是感觉有点太过分了。
大多数钩子会在双向绑定加载输入文本之前运行。每次有人选择其他字段时,其他字段也会运行。
代码:https://stackblitz.com/edit/angular-pxrssq
setTimeout()
是否有一个生命周期挂钩在组件初始化之后运行一次,但是在双向绑定加载之后?
答案 0 :(得分:0)
事实上,使用setTimeout()
并不是
Angular的单向数据流规则禁止在视图组成后对其进行更新。
为了观察此规则的结果,请尝试为info
钩子上的ChildComponent
的{{1}}属性分配一个新值。您将得到一个AfterViewInit
,它是Angle所说的“禁止在合成后更新视图!”
由于您没有更新组件的任何数据绑定属性,而只是进行dom操作,所以angular不会抛出任何错误,但也不会反映对dom的更改。
回到您的问题;
是否有一个生命周期挂钩在组件初始化之后运行一次,但是在双向绑定加载之后?
是的,它是AfterViewInit钩子。因为;
视图查询是在调用ngAfterViewInit回调之前设置的。
,如here中所述,在调用ExpressionChangedAfterItHasBeenCheckedError
之前处理DOM更新。
当指令的任何数据绑定属性发生更改时,将调用OnChanges。
因此,如果希望在第一次加载组件时只选择一次文本,则应该执行以下操作。
ngAfterViewInit
如果要在父组件更改ngAfterViewInit() {
setTimeout(() => this.input.nativeElement.select());
}
属性(包括首次加载)时选择文本,则需要实现input
钩子。
OnChanges
这是一个有效的演示https://stackblitz.com/edit/angular-owahps
希望有帮助。