How to get the dimension of dynamic rendered element in Angular

前端 未结 2 645
陌清茗
陌清茗 2021-01-15 16:12

just imagine: 1. in component.html, you have

{{text}}

相关标签:
2条回答
  • 2021-01-15 16:30

    It returns the previous values because it takes time for the browser to compute the new style.

    The RequestAnimationFrame API is what you are looking for.

    Once you've set the new text, use the RequestAnimationFrameAPI, it's a callback triggered once the browser is ready, basically when its render queue is empty.

    this.text = "blablablabla...."
    window.requestAnimationFrame(() => {
      // access the new css values here
    })
    
    0 讨论(0)
  • 2021-01-15 16:39

    In most cases, you don't need to set the height of the div container in code. It automatically adjusts to its content and can be fine-tuned with CSS style attributes.

    But if you want to do some special calculations with the paragraph height to set the height of the div, you can do it with data binding (using the element.offsetHeight property in the calculations):

    <div [style.height.px]="calculateDivHeight(paragraph)">
        <p #paragraph>{{text}}</p>
    <div>
    <button (click)="changeText()">changeText</button>
    
    public calculateDivHeight(paragraph: HTMLElement): number {
        return doSomeProcessing(paragraph.offsetHeight);
    }
    

    Your current code could also work if you force change detection (see this answer) just after changing the paragraph content:

    import { ApplicationRef } from '@angular/core';
    
    constructor(private applicationRef: ApplicationRef, ...) {
      ...
    }
    
    changeText() {
      this.text = 'blablablabla.....';
      this.applicationRef.tick();
      let divEl = this.el.nativeElement.querySelector('#myDiv');
      ...
    }
    
    0 讨论(0)
提交回复
热议问题