Ich habe Komponente wie unter denen ist im Grunde ein popover:Angular 2 getBoundingClientRect aus Komponente
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;
}
}
Im Innern der show()
Methode, die ich das Ergebnis von getBoundingClientRect()
zu bekommen versuchen aber seinen 0
für alle Eigenschaften der Rückkehr, aber wenn ich schreibe in document.getElementById("temp").getBoundingClientRect()
von Chrome-Konsole bekomme ich richtige Ergebnis mit tatsächlichen Werten in den Eigenschaften. Warum der Unterschied und was kann ich tun, um den tatsächlichen Wert von meiner Komponente zu erhalten?
Ich würde keinen Unterschied erwarten. Kannst du in einem Plunker reproduzieren? –
Ich vermute, dass Dom noch nicht aktualisiert wurde, um Ihnen die richtige Größe zu geben. Können Sie die Konsolenanweisung in setTimeout umbrechen, um zu sehen, ob das funktioniert. –
@ArpitAgarwal Yeah 'setTimeout()' hat den Trick gemacht :) – lbrahim