【问题标题】:How get style values from a HTMLElement with angular2 and Typescript如何使用 angular2 和 Typescript 从 HTMLElement 获取样式值
【发布时间】:2025-11-20 16:20:09
【问题描述】:

是否可以从 HTMLElement 中读取值?

以下代码可以正常工作,但在向后转换时有一点延迟。这就是我需要 _target 元素的高度值的地方。

import {
Directive, Input, Renderer, OnInit, ElementRef, TemplateRef
} from '@angular/core';

@Directive({
selector: '[accordion]'

})
export class AccordionDirective implements OnInit{
   private _listener:Function;
   private _active = false;
   private _height;

   @Input('accordion') _target:HTMLElement;

   constructor(private _renderer:Renderer,
               private element:ElementRef) {
   }

   ngOnInit() {

    this._renderer.setElementStyle(this._target, 'max-height', '0em');
    this._renderer.setElementClass(this._target, 'slider', true); // set css transition to the target element

    this._listener = this._renderer.listen(this.element.nativeElement, 'click', () => {

        if(!this._active){
            this._renderer.setElementStyle(this._target, 'max-height', '50em'); <-- here is the variable height needed
        }else{
            this._renderer.setElementStyle(this._target, 'max-height', '0em');
        }
        this._active = !this._active;
        });
     }
   }

【问题讨论】:

    标签: angular directive angular2-template angular2-directives


    【解决方案1】:

    这就是这个问题的解决方案。

    import {
      Directive, Input, Renderer, OnInit, ElementRef, TemplateRef
    } from '@angular/core';
    
    @Directive({
      selector: '[accordion]'
    
    })
    
    export class AccordionDirective implements OnInit{
      private _listener:Function;
      private _active = false;
      private _height;
      private _maxHeight;
    
      @Input('accordion') _target:HTMLElement;
    
      constructor(private _renderer:Renderer,
               private element:ElementRef) {}
    
      ngOnInit() {
      this._maxHeight = this._target.scrollHeight;
      this._renderer.setElementStyle(this._target, 'max-height', '0em');
      this._renderer.setElementClass(this._target, 'slider', true);
    
      this._listener = this._renderer.listen(this.element.nativeElement, 'click', () => {
    
        if(!this._active){
            this._renderer.setElementStyle(this._target, 'max-height', this._maxHeight + 'px');
        }else{
            this._renderer.setElementStyle(this._target, 'max-height', '0em');
        }
        this._active = !this._active;
        });
      }
    }
    

    【讨论】: