2016-08-05 105 views
1

是否可以從HTMLElement中讀取值?如何從HTMLElement獲取樣式值,使用angular2和Typescript

以下代碼正在工作,但它在向後轉換中有小的延遲。那就是我需要_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; 
     }); 
    } 
    } 

回答

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; 
    }); 
    } 
} 
-2

使用ngClass/ngStyle添加&刪除類/風格

+1

這不是問題,我需要HTMLElement的當前值高度來處理轉換沒有延遲。 – Zero

+0

然後用普通的Javascript代替它。像document.getElementById(this.target.id).style.maxHeight – Ray

+0

這是不可能的,因爲該元素沒有maxHeight值。但我有一個解決方案,我用this.target.scrollHeight得到了價值。 – Zero

相關問題