如何将一个类添加到一个元素并从所有兄弟元素中删除一个类 angular

我的页面顶部有一个简单的菜单栏。我想单击一个元素并具有相反的颜色/背景色。显然,在更改单击元素上的样式之前,我需要能够将所有同级元素重置回默认颜色/背景颜色。

到目前为止,我的点击事件函数看起来像这样

onSelect(event, source: Source): void {
    console.log(event.target);

    //reset all a elements do background-color:white and color:white
    var siblings = event.target.parentNode.children;
    for(var i=0; i<siblings.length; i++) {
      siblings[i].style.backgroundColor = "white";
      siblings[i].style.color = "black";
    }

    event.target.style.backgroundColor = "black";
    event.target.style.color = "white";
    this._sharedService.publishData(source.id);

  }

在 Angular 2 中是否有更好的方法或更“棱角分明”的方法或更简洁的方法来实现这一目标?

这就是我现在正在尝试的,但该类不会从 unsel-source 更改为 sel-source

我的 source.component.html 文件如下所示:

<nav id="nav" class="fixed sources-main">
  <div class="flex flex-wrap pl1 border-bottom">
      <a *ngFor="let source of sources; let i = index"
      [ngClass]="{'sel-source':isSelected === i}" 
      (click)="onSelect(i, source)" 
      class="h5 bold mr1">
        {{source.name}}
      </a>
  </div>
</nav>

source.component.ts 文件如下所示:

import { Component, OnInit } from '@angular/core';
import {SourcesService} from './sources.service'
import { Source } from './source';

import { SharedService } from '../shared.service';

@Component({
  selector: 'app-sources',
  templateUrl: './sources.component.html',
  styleUrls: ['./sources.component.css'],
  providers:[SourcesService]
})
export class SourcesComponent implements OnInit {

  sources : Source[];
  isSelected;

  constructor(sourceService: SourcesService, private _sharedService: SharedService) { 
    sourceService.getSources().subscribe(sources => this.sources = sources);
  }

  ngOnInit() {
  }

  onSelect(index, source: Source): void {
    this.isSelected = index;
    this._sharedService.publishData(source.id);
  }

}

我的styles.css文件

body, a {
    font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Open Sans,Helvetica Neue,Helvetica,sans-serif;
    line-height: 1.5;
    margin: 0;
    color: #111;
    background-color: #fff;
}

.sources-main {
    width:100%;
    background-color: #fff;
}

.articles-main {
    padding-top: 25px;
}

.sel-source {
    color:white;
    background-color: black;
}
布兰登怀廷

你可以尝试这样的事情:

  • 当您遍历 ngFor 中的项目时,还要获取其索引
  • 当点击事件被触发时,还要在循环中传入索引并将其分配给一个变量
  • 在组件中具有跟踪所选索引的属性(将从未定义开始
  • 在单击事件处理程序中,将所选索引设置为传入的值
  • 回到html中,根据索引是否为选定索引动态设置一个带有ngClass的类

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

@Component({
  selector: 'test',
  template: `
    <div
      *ngFor="let item of items; let i = index"
      [ngClass]="{'selected': selectedItem === i}"
      (click)="onItemClick(i)">
      {{ item }}
    </div>
  `,
  styles: [`
    .selected {
      background-color: black;
    }
  `]
})
export class AppComponent {
  selectedItem;

  items = ["A", "B", "C", "D", "E", "F", "G", "H"];
  onItemClick(index) {
    this.selectedItem = index;
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将Angular添加到DOM的每个HTML元素添加一个CSS类

Angular指令未将CSS类添加到另一个元素

Angular.js:根据使用的路线,将一个类添加到作用域之外的元素

Angular 2+ 添加或删除属于另一个组件的元素的类

如何显示元素内元素的所有对象,直到 Angular 中的最后一个元素?

如何将一个属性中的 json 属性添加到 Angular json 中的另一个属性中 - 如合并

将特定的 css 类添加到两个第一个元素,然后保留下两个元素,因此在 Angular 和 flex 中使用 ngFor

Angular Js:如何在ng-repeat中查找第一个和最后一个元素并为其添加特殊类?

如何在Angular 2中获取下一个元素/兄弟姐妹

将鼠标悬停在Angular JS的一个元素上并将addClass添加到其他elem

Angular 6 从另一个 ngFor 向 ngFor 元素添加活动类

如何将一个类和函数中的变量导出到Angular中的另一个组件?

Angular:如何将一个对象“嵌套”在另一个对象中?

根据数组Angular中的位置删除和添加一个类

如何将类元素添加到另一个私有类中的向量

如何将所选项目添加到打字稿中的另一个多重选择中(Angular 4项目)

如何在单击时将类添加到块中的一个元素并从其他元素中删除相同的类?

如何在Angular 6中的另一个类中的一个类中调用函数?

Angular RxJS 将值从 Observable 数组中的一个元素复制到下一个元素

如何将多个电子邮件地址的验证添加到一个用逗号分隔的收件人字段中-Angular 5

如何将一个类一个接一个地添加到列表中的每个元素

Angular2仅在第一个元素上使用ng-for时如何设置元素类名称

如何将一个Observable数组附加到通过Angular异步管道使用的现有数组中?

如何从 JSON - Angular 2 中选择一个元素

在Angular 6中'component'不是一个已知元素

WordPress菜单如何将一个类添加到仅父元素?

如何将一个类添加到其高度大于宽度的元素的父元素中

如何将一个组件的行为与另一个组件分开[Angular]

单击时,将类添加到HTML列表中的一个且只有一个元素