2016-05-12 3 views
1

Ich habe eine Vorlage wie folgt aus:Stil ändern spezifischer Element innerhalb * ngFor ohne Klasse

<div> 
    <span class="tag label label-primary" *ngFor="let tag of tags"> 
     {{ tag }} 
    </span> 
</div> 

ich eine Funktion addTag(tag) in meiner Komponente haben, die erlaubt nur ein Tag zum Array hinzugefügt werden, wenn es existiert nicht schon.

private addTag(tag) { 
    // Checks if the tag is empty or only consists of whitespace 
    // or is already in tags array 
    if (tag.replace(/\s/g, "").length == 0 || _.contains(this.tags, tag)) 
     return; 

    this.tags.push(tag.trim()); 
} 

Wenn der Benutzer einen Tag hinzuzufügen versucht, die bereits vorhanden ist, möchte ich blinken (gesetzt Opazität auf Null und erhöhen sie mit setInterval), um die bereits vorhandenen Tag.

Wie ändere ich die Deckkraft des richtigen Bereichselements?

Antwort

1

Sie so etwas wie dies versuchen könnte:

<span [ngClass]="{flash:i==flashIndex}" class="tag" *ngFor="let tag of tags;let i = index"> 
    {{ tag }} 
</span> 
... 
flashIndex: number; 
tags: Array<string> = []; 
addTag(tagInput) { 
    let tag = tagInput.value; 
    if (!tag.replace(/\s/g, "").length) return; 

    const existedItem = this.tags.find(x => x === tag); 

    if (existedItem) { 
    this.flashIndex = this.tags.indexOf(existedItem); 
    setTimeout(()=> this.flashIndex = -1, 1000); 
    return; 
    } 

    this.tags.push(tag.trim()); 
    tagInput.value = ''; 
} 

Siehe entsprechende plunker

+0

Ah, sehr clever danke! Ein Zusatz: Der '# i = index' sollte wahrscheinlich 'let i = index' richtig sein? –

+0

@ ChristopherStöckl Vielleicht hast du recht. Ich sah hier https://angular.io/docs/ts/latest/api/common/NgFor-directive.html#!#syntax – yurzui

+0

Ja, ich habe Ihre Antwort implementiert und es sagte mir in der Konsole, dass die Verwendung von '# 'ist veraltet und sollte" lassen "sein. Ich benutze Version 2.0.0-beta.17 von angular2. –

1
<div> 
    <span [style.opacity]="flash" class="tag label label-primary" *ngFor="let tag of tags"> 
     {{ tag }} 
    </span> 
</div> 

Der Wert der flash Eigenschaft in Ihrer Komponentenklasse wird auf den Stil-Elemente gesetzt werden.

Alternative:

<div> 
    <span [ngStyle]="{opacity:flash}" class="tag label label-primary" *ngFor="let tag of tags"> 
     {{ tag }} 
    </span> 
</div> 
+0

ich bereits versucht haben, dass es nicht funktioniert, weil es diesen Stil setzt auf allen Spannweiten. Ich muss eine bestimmte zielen. –

+0

Sie können ein Array oder Objekt 'flash' machen und' {opacity: flash [x]} 'verwenden, wobei' x' 'tag' oder der' index' von 'ngFor' sein könnte oder was auch immer für Sie funktioniert. –

Verwandte Themen