Угловой ngClass и событие click для переключения класса

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

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

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

В.ts:

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

Ответ 1

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

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

status: boolean = false;
clickEvent(){
    this.status = !this.status;       
}

Ответ 2

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

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

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

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

Ответ 3

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

шаблон:

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

в тс:

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

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

Можно было бы это сделать и в директиве;)

Ответ 4

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;       
    }

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

Ответ 5

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

HTML файл, который использует загрузку:

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

TS файл:

muteStream() {
   this.status = !this.status;
}

Ответ 6

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

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