Angular ngClass и событие click для переключения класса

В Angular я хотел бы использовать ngClass и щелкнуть событие для переключения класса. Я просмотрел онлайн, но некоторые из них angular1, и нет четких инструкций или примеров. Любая помощь будет высоко ценится!

В HTML у меня есть следующее:

<div class="my_class" (click)="clickEvent($event)" ngClass="{'active': toggle}">
  Some content
</div>

In .ts:

clickEvent(event) {
  // Haven't really got far
  var targetEle = event.srcElement.attributes.class;
}

person Steve Kim    schedule 14.06.2017    source источник


Ответы (9)


Это должно сработать для вас.

В .html:

<div class="my_class" (click)="clickEvent()"  
    [ngClass]="status ? 'success' : 'danger'">                
     Some content
</div>

In .ts:

status: boolean = false;
clickEvent(){
    this.status = !this.status;       
}
person Mani S    schedule 14.06.2017
comment
Просто быстрый вопрос. Первый щелчок добавляет класс, но второй щелчок не работает. Из вашего кода я не вижу, как он меняет status обратно на false. - person Steve Kim; 14.06.2017
comment
внес изменения в мой код., вы можете изначально установить для него значение false, а затем функция переключит значение bool на true ‹-› false. - person Mani S; 14.06.2017

Вместо того, чтобы создавать функцию в файле ts, вы можете переключать переменную из самого шаблона. Затем вы можете использовать переменную, чтобы применить к элементу определенный класс. Вот так-

<div (click)="status=!status"  
    [ngClass]="status ? 'success' : 'danger'">                
     Some content
</div>

Итак, когда статус истинен, применяется успех класса. Когда он ложный, применяется класс опасности.

Это будет работать без дополнительного кода в файле ts.

person charsi    schedule 30.01.2018
comment
Придется ли вам указывать статус в шаблоне? - person webworm; 07.01.2019
comment
@webworm нет, вам не нужно объявлять status в шаблоне. - person ANeves thinks SE is evil; 26.03.2019
comment
Можно ли использовать этот подход также для div внутри ngFor? Потому что я пробую это, но кажется, что angular меняет класс на все div, созданные с помощью ngFor, а не только на тот, который я нажимаю; Благодарю. - person S-Wing; 03.12.2019

Angular6 с использованием renderer2 без каких-либо переменных и чистого шаблона:

шаблон:

<div (click)="toggleClass($event,'testClass')"></div>

in ts:

toggleClass(event: any, className: string) {
  const hasClass = event.target.classList.contains(className);

  if(hasClass) {
    this.renderer.removeClass(event.target, className);
  } else {
    this.renderer.addClass(event.target, className);
  }
}

Это тоже можно было бы поместить в директиву;)

person neox5    schedule 17.08.2018
comment
Не следует использовать зарезервированный класс ключевых слов. - person desertSniper87; 25.04.2021

ngClass следует заключить в квадратные скобки, поскольку это привязка свойства. Попробуй это:

<div class="my_class" (click)="clickEvent($event)"  [ngClass]="{'active': toggle}">                
     Some content
</div>

В вашем компоненте:

     //define the toogle property
     private toggle : boolean = false;

    //define your method
    clickEvent(event){
       //if you just want to toggle the class; change toggle variable.
       this.toggle = !this.toggle;       
    }

Надеюсь, это поможет.

person Saurabh Tiwari    schedule 14.06.2017

Если вы ищете только HTML-способ сделать это в angular ...

<div #myDiv class="my_class" (click)="myDiv.classList.toggle('active')">
  Some content
</div>

Важный бит - это #myDiv часть.

Это ссылка на узел HTML, поэтому вы можете использовать эту переменную, как если бы она была присвоена document.querySelector('.my_class')

ПРИМЕЧАНИЕ. эта переменная зависит от области видимости, поэтому вы можете использовать ее в *ngFor операторах.

person Craig Wayne    schedule 14.02.2021

Мы также можем использовать ngClass для назначения нескольких классов CSS на основе нескольких условий, как показано ниже:

<div
  [ngClass]="{
  'class-name': trueCondition,
  'other-class': !trueCondition
}"
></div>
person MiPhyo    schedule 19.06.2019

Если вы хотите переключить текст с помощью переключателя.

HTML-файл с использованием начальной загрузки:

<input class="btn" (click)="muteStream()"  type="button"
          [ngClass]="status ? 'btn-success' : 'btn-danger'" 
          [value]="status ? 'unmute' : 'mute'"/>

TS файл:

muteStream() {
   this.status = !this.status;
}
person Bilal Ahmad    schedule 29.06.2018

Поэтому обычно вы должны создать резервную переменную в классе, переключить ее щелчком и привязать привязку класса к переменной. Что-то вроде:

@Component(
    selector:'foo',
    template:`<a (click)="onClick()"
                         [class.selected]="wasClicked">Link</a>
    `)
export class MyComponent {
    wasClicked = false;

    onClick() {
        this.wasClicked= !this.wasClicked;
    }
}
person Hammad Ahmad    schedule 18.11.2019

Вы можете попробовать это.

HTML.

<button *ngFor="let color of colors; let index=index" class="example1" 
        (click)="selectColor(index)" [class.choose__color]="viewMode == index">
    <mat-icon>fiber_manual_record</mat-icon>
</button>

css.

.example1:hover {
    border-bottom: 2px solid black;
}

.choose__color {
     border-bottom: 2px solid black;
}

ts.

selectColor(index: any) {
    this.viewMode = index;
}
person olorunshola matins    schedule 08.07.2021