У меня есть компонент, как показано ниже, который в основном поповер:Угловое 2 getBoundingClientRect от компонента
import {Component, Input, ViewChild} from 'angular2/core'
declare var $: any;
@Component({
selector: 'popover',
template: `
<div id="temp" [ngStyle]="{'position':'absolute', 'z-index':'10000', 'top': y + 'px', left: x + 'px'}"
[hidden]="hidden" #temp>
<ng-content></ng-content>
</div>
`
})
export class Popover {
@ViewChild("temp") temp;
private hidden: boolean = true;
private y: number = 0;
private x: number = 0;
show(target, shiftx = 0, shifty = 0){
let position = $(target).offset();
this.x = position.left + shiftx;
this.y = position.top + shifty;
this.hidden = false;
console.log("#temp", this.temp.nativeElement.getBoundingClientRect()); //all 0s
console.log("temp id", document.getElementById('temp').getBoundingClientRect()); //all 0s
}
hide(){
this.hidden = true;
}
}
Внутри show()
метод, который я пытаюсь получить результат getBoundingClientRect()
, но его возвращение 0
для всех свойств, но когда я печатаю в document.getElementById("temp").getBoundingClientRect()
с консоли Chrome. Я получаю правильный результат с фактическими значениями в свойствах. Почему разница и что я могу сделать, чтобы получить фактическое значение от моего компонента?
Я бы не ожидал разницы. Можете ли вы воспроизвести в Plunker? –
Я подозреваю, что Dom еще не обновлен, чтобы дать вам правильный размер. Можете ли вы обернуть консольный оператор в setTimeout, чтобы узнать, работает ли это. –
@ArpitAgarwal Yeah 'setTimeout()' сделал трюк :) – lbrahim