2017-01-07 5 views
4

Ich habe eine benutzerdefinierte Direktive, die in der Lage sein sollte, Klasse abhängig von anderen Bedingungen hinzufügen/entfernen.Wie Klasse hinzufügen/entfernen von Direktive

I.e.

// imports 

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

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

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

ich denke, Sie wissen, wie Arten hinzufügen mit Host-Bindung aber Klassen sind nicht in Richtlinien unterstützt ich denke:/http://stackoverflow.com/questions/35915433/angular2-styles -in-directive # comment59489878_35915497 – echonax

Antwort

10

Wenn Sie nicht wollen, die ngClass Richtlinie verwenden (Hinweis: Sie eine Funktion [ngClass]="myClasses()" passieren kann, wenn es zu chaotisch inline in Ihrer Vorlage sein würde) können Sie die Renderer2 nur nutzen können, für sie einen hinzufügen oder mehr Klassen:

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

Sie sind Anzeige ded ein 'Renderer2'. Zum Teufel! Danke für diese Antwort. – Tom

+0

Was ist ein Hostelement? – Karty

+0

@Karty das Element, an dem die Richtlinie an – 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); 
    } 

} 
Verwandte Themen