2017-01-07 15 views
4

我有一個自定義指令,它應該能夠根據其他條件添加/刪除類。如何從指令中添加/刪除類

I.e.

// imports 

@Directive({ 
    selector: '[customDirective]' 
}) 

export class CustomDirective { 
    constructor(service: SomService) { 
     // code to add class 

     if (service.someCondition()) { 
      // code to remove class 
     } 
    } 
} 
+0

我想你知道如何與主機結合,但類不是內部指令支持樣式添加我猜:/ http://stackoverflow.com/questions/35915433/angular2-styles -in-a-directive#comment59489878_35915497 – echonax

回答

10

如果你不想使用ngClass指令(提示:你可以通過一個函數來[ngClass]="myClasses()"如果這將是在你的模板凌亂在線)你可以利用Renderer2爲它添加一個或多個類:

export class CustomDirective { 

    constructor(private renderer: Renderer2, 
       private elementRef: ElementRef, 
       service: SomService) { 
    } 

    addClass(className: string, element: any) { 
     this.renderer.addClass(element, className); 
     // or use the host element directly 
     // this.renderer.addClass(this.elementRef.nativeElement, className); 
    } 

    removeClass(className: string, element: any) { 
     this.renderer.removeClass(element, className); 
    } 

} 
+0

他們是廣告代表'Renderer2'。哎呀!感謝這個答案。 – Tom

+0

什麼是主機元素? – Karty

+0

@Karty指令所附的元素 – lexith

0
export class CustomDirective { 
    classname:string = "magenta"; 

    constructor(private renderer: Renderer2, 
       private elementRef: ElementRef, 
       service: SomService) { 
    } 

    addClass(className: string, element: any) { 
     // make sure you declare classname in your main style.css 
     this.renderer.addClass(this.elementRef.nativeElement, className); 
    } 

    removeClass(className: string, element: any) { 
     this.renderer.removeClass(this.elementRef.nativeElement,className); 
    } 

}