<div style="width:100%;height:100%;position:relative;background-color:white" id ="OuterSvg"> </div>
onPageLoaded(){
console.log(document.getElementById("OuterSvg").offsetHeight); //get 0.
}
ngAfterViewInit(){
console.log(document.getElementById("OuterSvg").offsetHeight); //get 0.
}
J'ai essayé onPageLoaded () et ngAfterViewInit () mais ne fonctionne pas non plus ... Alors, comment obtenir la hauteur/largeur de l'élément après la hauteur de la dom rendue?
Ce que vous voulez, c'est la hauteur d'un élément après que Angular a traité les cycles de vie des événements, compilé le code HTML et l'a injecté dans la page, et que le navigateur ait fini de rendre ce code HTML.
Vous avez besoin de la hauteur que lorsque sa stabilité, pas avant. Le problème est que tout ce qui est fait après Angular abandonne le tour de Javascript VM, et il n'y a pas d'événement "rendu du navigateur terminé" ou "mise en page calculée".
Vous devez donner au navigateur une chance de calculer la hauteur et de l'appliquer. Par exemple, appelez setTimeout
. Cela donnera au navigateur la possibilité de calculer la hauteur.
Un intervalle de zéro ms fonctionnerait probablement. En effet, les appels à offsetHeight déclenchent un nouveau calcul de la mise en page si nécessaire (voir ici ).
Ceci est un problème général et n'est pas spécifique au framework, c'est juste la façon dont les navigateurs fonctionnent. En général, il est préférable d’essayer d’éviter autant que possible ce type de logique (attendre que la hauteur soit stable pour faire X), cela a tendance à créer des problèmes difficiles à résoudre.
Essayez la fonction ngAfterViewInit
ngAfterViewInit(){
console.log(document.getElementById("OuterSvg").offsetHeight);
}
Et votre HTML div
est-il identique? Sinon, vous pourriez envisager de supprimer l'espace après id
:
<div style="width:100%;height:100%;position:relative;background-color:white" id="OuterSvg">
Cela semble fonctionner
Dans la vue
<results-control></results-control>
Dans le composant
import {Component,ViewChild,ElementRef} from '@angular/core';
@Component({
selector: 'results-control',
template: '<div #resultsControlContainer> ... </div>'
})
export class ResultsControl {
@ViewChild('resultsControlContainer') resultsControlContainerEl: ElementRef;
ngAfterViewInit() {
var height = this.resultsControlContainerEl.nativeElement.offsetHeight;
console.log(height);
}
}
Essayez ionViewDidEnter
Afficher les crochets du cycle de vie Heureusement, Ionic regroupe un ensemble de crochets de vue Cycle de vie dans le NavController - composant du module Ionic .
ionViewLoaded fonctionne de la même manière que ngOnInit, se déclenche une fois lorsque la vue est initialement chargé dans le DOM
ionViewWillEnter et ionViewDidEnter sont des crochets disponibles avant et après la page en question devient actif
ionViewWillLeave et ionViewDidLeave sont des crochets qui sont disponible avant et après que la page quitte la fenêtre
ionViewWillUnload et ionViewDidUnload sont des crochets disponibles avant et après la suppression de la page du DOM