2016-05-27 11 views
17

Ich habe zwei Fragen hier zu sehen, wie Attribute auf einem Element bedingt hinzufügen und entfernen (Is it possible to conditionally display element attributes using Angular2?) aber meine Frage ist, ob es möglich ist hinzuzufügen und zu entfernen Attribut-Direktiven? Ich bin in der Lage, das Attribut hinzuzufügen und zu entfernen, aber Angular "kompiliert" das Attribut nicht als Attribut-Direktive, aber das Attribut sitzt einfach da und tut nichts. Hier ist ein Beispiel für 2 Tags:Angular 2 bedingt hinzufügen Attribut-Direktiven

Die erste ist die, die ich versuche, die Attribut-Anweisung bedingt anzuwenden, und die zweite hat es die ganze Zeit.

Hier ist der gif ist: enter image description here

Hier ist, wie ich das Attribut beantrage (vielleicht gibt es eine andere Art und Weise Attribut Richtlinie anzuwenden?)

<h1 [attr.colored]="check ? '': null">Testing something</h1> 

Und hier ist die Richtlinie:

import {Directive, ElementRef} from '@angular/core' 
@Directive({ 
    selector: '[colored]', 
    host: { 
     '(mouseenter)': 'onMouseEnter()', 
     '(mouseleave)': 'onMouseLeave()' 
    } 
}) 

export class colorDirective { 
    constructor(private el: ElementRef) { 
    } 
    onMouseEnter() { this.highlight("yellow"); } 
    onMouseLeave() { this.highlight(null); } 

    private highlight(color: string) { 
     this.el.nativeElement.style.backgroundColor = color; 
    } 
} 

Edit: Es gibt einige Antworten, aber sie sind für AngularJS (1)

Antwort

8

Das wird nicht unterstützt. Anweisungen werden nur angewendet, wenn statisches HTML mit dem Selektor übereinstimmt.

+0

gibt es eine Möglichkeit, wie Winkel zu zwingen, irgendwie dieses Element neu zu kompilieren, es anzuwenden? oder gibt es einen anderen Weg, dies zu tun? Ich brauche es jetzt nicht, aber ich war nur neugierig –

+3

Nicht so weit ich weiß. Was Sie tun können, ist ein Element mit und ohne den directory-Selektor hinzuzufügen und 'ngIf' zu verwenden, um zu ändern, welcher dem DOM hinzugefügt/entfernt werden soll. –

+0

@ GünterZöchbauer kannst du dir bitte meine Frage anschauen vielleicht hast du eine Idee http://stackoverflow.com/questions/37489029/how-can-i-get-the-value-from-json-url – Abderrahim

-1

Bevor Sie also eine Komponente kompilieren können, kompilieren Sie ihren eigenen $ scope mit $ compile(), aber nicht in angular2. Sie können eine neue Komponente zur Laufzeit kompilieren, hier sind ein guter SO mit einem paar Möglichkeiten, um mit dynamicComponentLoader: Equivalent of $compile in Angular 2

und einem anderen: Angular 2 equivalent of ng-bind-html, $sce.trustAsHTML(), and $compile?

Die Frage, die ich habe, ist, was die Richtlinien Anwendungsfall von Makeln ist? Ich kann nicht glauben, warum sollte ich, aber ich bin gespannt, was Sie brauchen, ist .. Für die meisten Dinge ngIf, ngSwitch usw. für mich arbeiten, während Makeln ..

+0

Hier ist mein Anwendungsfall: Ich benutze Bootstrap. Ich habe eine Komponente für Texteingaben erstellt, so dass ich nicht den Wrapper erstellen muss div ('.form-group') und die Beschriftung für die Texteingabe, und kann stattdessen nur eine Zeile für jede Texteingabe verwenden, wobei das Label als' @Input() 'an die Komponente übergeben wird. Ich habe auch eine CurrencyDirective erstellt um die Eingabe als Währung zu formatieren.Jetzt möchte ich in der Lage sein, diese Direktive auf einen meiner Texteingaben zu setzen, aber ich müsste ein Flag in die Texteingabekomponente übergeben, die angibt, ob die Direktive dem '' Element in der Komponente hinzugefügt werden soll oder nicht. – Travesty3

0

Sie könnten eine Flagge der Richtlinie passieren

in der Richtlinie:

ngAfterViewInit() 
{ 
    let tooltip = this.tooltip instanceof Object ? this.tooltip : {disabled: this.tooltip}; 
    if (!tooltip.disabled) { 
    //DO STUFF 
    } 
} 

In DOM:

<span [tooltip]="{disabled: true}"></span> 
Verwandte Themen