我正在尝试获取元素的offsetLeft,但除非我使用setTimeout,否则会得到不正确的值。
基本上在指令中我有这个:
ngAfterContentInit() {
console.log(this.el.nativeElement.offsetLeft);
}
文档说明了ngAfterContentInit“在指令内容完全初始化后调用的生命周期钩子”。但是不是返回40px而是返回8px(甚至不确定它在哪里得到8)。
为什么它不起作用的任何想法?是因为指令的根元素不被视为指令的一部分,只有它的子节点是?
答案 0 :(得分:1)
我认为这应该有效:
ngAfterContentInit() {
setTimeout(() => {
console.log(this.el.nativeElement.offsetLeft);
});
}
这是因为在ngAfterContentInit()
火灾时,儿童仍然没有被渲染 - 所以你需要给角度时间来做这件事。
答案 1 :(得分:0)
如果您不想使用超时,请使用以下语法的AfterViewChecked:
start = true;
.....
ngAfterContentChecked() {
if (this.start){
console.log(this.el.nativeElement.offsetLeft);
}
this.start = false;
}