Угловой добавить класс динамически - PullRequest
0 голосов
/ 05 июля 2018

Есть ли способ добавить класс из файла .ts, используя угловые решения

<div [class.extra-sparkle]="isDelightful == true">

Я хочу сделать выше, но со стороны файла .ts. Чем меньше кода, тем лучше.

<button class="general" (click)="ChangeScreen('Global')"       [class.selected]="CurrentPage == 'Global'">Global</button>
<button class="general" (click)="ChangeScreen('Maintenance')"  [class.selected]="CurrentPage == 'Maintenance'">Maintenance</button>
<button class="general" (click)="ChangeScreen('Settings')"     [class.selected]="CurrentPage == 'Settings'">Settings</button>
<button class="general" (click)="ChangeScreen('Profile')"      [class.selected]="CurrentPage == 'Profile'">Profile</button>
<button class="general" (click)="ChangeScreen('Transactions')" [class.selected]="CurrentPage == 'Transactions'">Transactions</button>

Я бы хотел добавить что-то подобное в функцию ChangeScreen:

ChangeScreen(page) {
    page.addClass = page;
}

Тогда я могу удалить все эти строки: [class.selected]="CurrentPage == '...'"

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Пока работает решение с рендерером, я предлагаю вам создать структуру данных для ваших кнопок

buttons: Array<{label: string}> = [
    {
      label: 'Global'
    },
    {
      label: 'Maintenance'
    },
    {
      label: 'Settings'
    },
    {
      label: 'Profile'
    },
    {
      label: 'Transactions'
    }
  ]

Это можно легко повторить, используя ngFor

<button 
  *ngFor="let button of buttons" 
  class="general" 
  (click)="ChangeScreen(button.label)" 
  [class.selected]="CurrentPage == button.label">
  {{ button.label }}
</button>

И единственное, что понадобится вашему ChangeScreen методу - это ... то, что он уже делает, настраивая текущую страницу!

См. stackblitz для примера того, как это заканчивается.

0 голосов
/ 05 июля 2018

Использование Renderer

Смотрите здесь: https://angular.io/api/core/Renderer

и здесь: https://angular.io/api/core/Renderer#setElementClass

import { Renderer } from '@angular/core';

constructor(private render:Renderer) { }

ChangeScreen(event:any) {
 this.renderer.setElementClass(event.target,"selected",true);
}

В html:

<button class="general" (click)="ChangeScreen()">Global</button>

Или Render2:

Смотрите здесь: https://angular.io/api/core/Renderer2

и здесь: https://angular.io/api/core/Renderer2#addClass

import { Renderer2 } from '@angular/core';

constructor(private render:Renderer2) { }

ChangeScreen(event:any) {
 this.renderer.addClass(event.target,"selected");
}

В html:

<button class="general" (click)="ChangeScreen()">Global</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...