Angular 2指令的生命周期钩子(ngAfterContentInit)不能像文档中描述的那样工作

时间:2017-10-10 19:23:10

标签: angular lifecycle

我正在尝试获取元素的offsetLeft,但除非我使用setTimeout,否则会得到不正确的值。

基本上在指令中我有这个:

ngAfterContentInit() {
    console.log(this.el.nativeElement.offsetLeft);
}

文档说明了ngAfterContentInit“在指令内容完全初始化后调用的生命周期钩子”。但是不是返回40px而是返回8px(甚至不确定它在哪里得到8)。

为什么它不起作用的任何想法?是因为指令的根元素不被视为指令的一部分,只有它的子节点是?

2 个答案:

答案 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;
}
相关问题