【问题标题】:Angular add class dynamicallyAngular动态添加类
【发布时间】:2018-12-13 16:43:33
【问题描述】:

有没有办法使用 Angular 解决方案从 .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 == '...'"

【问题讨论】:

标签: html css angular


【解决方案1】:

你可以使用ngClass指令:

<div id="mydiv" [ngClass]="{'myCSSclass' : condition}"></div>

就这么简单!仅当 condition 评估为 true 时,myDiv 才会具有类 myCSSclass。此条件可以在您的打字稿文件或模板中设置。

【讨论】:

  • ngClass 不是 div 的已知元素。我们不能将它与 div 一起使用
【解决方案2】:

使用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($event)">Global</button>

【讨论】:

  • 我添加的类是.selected,而不是页面名称
  • 但是,如果您现在有 10 个带有 [ngClass]="page" 的按钮,那么它们都将应用 .selected。我只想一次选择一个
  • 我觉得最好用Render2
  • 我们到了:)!哈哈。现在的问题是您需要从所有以前的中删除.selected。因为这会很好地添加 .selected 类,但它永远不会删除以前的类
  • 当然,你有 removeclass 功能(我是女人:))
【解决方案3】:

虽然使用渲染器的解决方案有效,但我建议您为按钮创建数据结构

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 了解如何进行的示例。

【讨论】:

  • 我觉得这并不能真正解决“动态角度添加类”的问题,但这是一个很棒的解决方案!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 2019-04-26
  • 2017-07-17
  • 2019-08-30
相关资源
最近更新 更多