2017-01-07 6 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()"に関数を渡すことができます)を使用したくない場合は、1を追加するためにあなただけの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); 
    } 

} 
関連する問題