Angular2 - 将 CSS 类添加到选定元素

Posted

技术标签:

【中文标题】Angular2 - 将 CSS 类添加到选定元素【英文标题】:Angular2 - Adding CSS class to selected element 【发布时间】:2017-02-28 03:38:51 【问题描述】:

我的.html 中有以下代码:

<ul id="navbar-example" class="nav nav-pills nav-stacked" *ngFor="let object of objects; let i = index;">
    <li class="nav-item" *ngIf = "i==0">
        <a id="object.code" class="nav-link active" (click)="clicked(object)">object.name</a>
    </li>
    <li class="nav-item" *ngIf = "i!=0">
        <a id="object.code" class="nav-link" (click)="clicked(object)">object.name</a>
    </li>
</ul>

所以当ul 被加载时第一个元素是活动的。现在我想将active 类添加到选定的&lt;a&gt;&lt;/a&gt; 并切换具有active 的类。我怎样才能实现它?

编辑:

我简化为:

<ul id="navbar-example" class="nav nav-pills nav-stacked" *ngFor="let object of objects;">
    <li class="nav-item" >
        <a [ngClass]=" 'active': selected == object "(click)="clicked(object)">object.names</a>
    </li>
</ul>

但它不起作用。这是我的组件:

import  Component, OnInit  from '@angular/core';
import  Router, ActivatedRoute, Params  from '@angular/router';
import  objectsService  from './objects.service';
import  object  from './object';


@Component(
  selector: 'objects',
  styles: [require('./object.css')],
  template: require('./objects.html'),
)
export class objects implements OnInit 
  objects: object[];
  codvisita: string;
  selected: any;

  constructor(private route: ActivatedRoute, private objectsService: objectsService) 
  

  ngOnInit() 
    this.route.params.forEach((params: Params) => 
      this.codvisita = params['id'];
    );
    this.objectsService.getobjects(this.codvisita)
      .subscribe(
        objects => 
          this.objects = objects;
          this.selected = this.objects[0];
          console.log(this.selected);
        
      );
  

  clicked(e) 
    this.selected = e;
    console.log(this.selected);
  

【问题讨论】:

【参考方案1】:

在您的组件中创建一个变量,我们将其命名为temp,然后将temp 的值设置为单击事件中的选定对象:

temp: any;

clicked(object) 
    this.temp = object;

然后在你的模板中你可以使用NgClass 指令来实现你想要的:

<ul id="navbar-example" class="nav nav-pills nav-stacked" *ngFor="let object of objects; let i = index;">
    <li class="nav-item">
        <a id="object.code" class="nav-link" [ngClass]=" 'active': temp.code == object.code " (click)="clicked(object)">object.name</a>
    </li>
</ul>

【讨论】:

它对我不起作用。看active&lt;a&gt; 的一个类。我更新了我的帖子 @FacundoGFlores console.log(this.selected); 打印您选择的对象吗? 是的,而且是第一个 @FacundoGFlores 哦,我犯了一个愚蠢的错误,你不能像那样比较对象。我稍后会编辑我的帖子,您需要比较 object.code 或其他一些唯一值而不是整个对象。 @FacundoGFlores 很高兴我能提供帮助。只需确保object.code 或您用作比较的任何值是唯一的,因为如果您在多个对象中具有相同的object.code,则所有对象都将获得active 类。

以上是关于Angular2 - 将 CSS 类添加到选定元素的主要内容,如果未能解决你的问题,请参考以下文章

angular2:如何按条件手动将css文件添加到index.html?

下一个和上一个元素 angular2

将 CSS 类添加到元素的技术的名称是啥?

使用指令将类添加到宿主元素[重复]

Javascript - 将 css 样式添加到具有类的元素

Angular2 - 将 div 添加到 DOM