css - Elimină sau adaugă clasă în Angular
Am o listă și pluginul (dragula) pe care l-am folosit adaugă o anumită clasă CSS la o anumită acțiune. Folosesc Angular 5. Vreau să aflu prezența unei anumite clase (myClass) și să o elimin și să o înlocuiesc cu (yourClass). În jQuery putem face asta astfel
$( "p" ).removeClass( "myClass" ).addClass( "yourClass" );
Cum pot realiza acest lucru în Angular5. Aici problema principală este că myClass este adăugat automat la li selectat de plugin. Deci, folosind o funcție nu pot seta clasa.
Când am încercat cu renderer2, acesta elimină clasa CSS și adaugă o altă clasă. Dar o adaugă doar primului li. Codul meu este:
let myTag ;
myTag = this.el.nativeElement.querySelector("li");
this.renderer.addClass(myTag, 'gu-mirrorss')
this.renderer.removeClass(myTag, 'dragbox');
<div class="right-height" id ='dest' [dragula]='"second-bag"' [dragulaModel]="questions">
{{ questions.length == 0 ? ' Drag and drop questions here ' : ' '}}
<li #vc data-toggle="tooltip" data-placement="bottom" title= {{question.questionSentence}} class="well dragbox" *ngFor="let question of questions; let i = index" [attr.data-id]="question.questionId" [attr.data-index]="i" (click)="addThisQuestionToArray(question,i, $event)" [class.active]="isQuestionSelected(question)" #myId > {{question.questionId}} {{question.questionSentence}}</li>
</div>
Răspuns #1
Importați ElementRef din angular core și definiți-l în constructor, apoi încercați codul de mai jos:
Linia de cod de mai jos îți va oferi prima apariție a etichetei <p> din Component. querySelector îți oferă primul element și querySelectorAll îți oferă toate elementele din DOM.
import { Component, ElementRef } from "@angular/core";
constructor(private el: ElementRef) {
}
let myTag = this.el.nativeElement.querySelector("p"); // you can select html element by getelementsByClassName also, please use as per your requirement.
Adaugă clasă:
if(!myTag.classList.contains('myClass'))
{
myTag.classList.add('myClass');
}
Elimină clasa:
myTag.classList.remove('myClass');
Răspunsul #2
Poți folosi id în HTML-ul tău
<button #namebutton class="btn btn-primary">login</button>
adaugă viewchild în fișierul tău .ts
@ViewChild('namebutton', { read: ElementRef, static:false }) namebutton: ElementRef;
creează o funcție care va declanșa evenimentul
actionButton() {
this.namebutton.nativeElement.classList.add('class-to-add')
setTimeout(() => {
this.namebutton.nativeElement.classList.remove('class-to-remove')
}, 1000);
}
și apelează funcția.
Dacă elementul tău nativ nu este definit, verifică acest răspuns Angular: nativeElement este nedefinit pe ViewChild
