【问题标题】:Set background color in *ngFor在 *ngFor 中设置背景颜色
【发布时间】:2021-07-11 01:20:06
【问题描述】:

我不确定这个标题是否能解决我的问题,但就是这样。

我有一个来自 angular material2 的md-toolbar,我正在循环获取动态值:

<md-toolbar (click)="selectedToolbarValue(key.Name)" *ngFor="let key of arrayOfKeys; let i=index">
       <span>{{key.Name}}</span>
</md-toolbar>

现在我想通过[ngClass] 为特定点击的工具栏设置背景颜色。这就是我所做的:

<md-toolbar [ngClass]="{'toolBarColor':setToolbarStyle}" (click)="selectedToolbarValue(key.Name)" *ngFor="let key of arrayOfKeys; let i=index">
       <span>{{key.Name}}</span>
</md-toolbar>

.ts:

setToolbarStyle:boolean=false;
selectedToolbarValue(value){
    this.setToolbarStyle = true;
    //other code
}

.scss:

.toolBarColor{
background-color:blue;
color:#fff;
}

现在上面的代码发生了什么,它为循环中的所有工具栏值设置样式。如何仅设置被单击的工具栏的样式?

【问题讨论】:

    标签: css angular angular-material angular-material2


    【解决方案1】:

    您可以在ngClass 表达式中使用函数而不是值。该函数可以采用索引或任何其他唯一标识符:

    <md-toolbar [ngClass]="{'toolBarColor':setToolbarStyle(i)}" (click)="selectedToolbarValue(key.Name, i)" *ngFor="let key of arrayOfKeys; let i=index">
    
    toolbarStyleIndex: number;
    
    setToolbarStyle(i) {
        return i===toolbarStyleIndex;
    }
    
    selectedToolbarValue(value, i){
        this.toolbarStyleIndex = i;
        //other code
    }
    

    【讨论】:

    • 您已将selectedToolbarValue(i) 方法更改为传递i 而不是key.Name。这不会改变他的代码的行为吗?有什么具体原因吗?
    • @Faisal,这只是一个示例,您可以传递任意数量的参数。或者使用其他键而不是索引,就像您在答案中所做的那样。重点是使用ngClass 中的函数。我已经更新了我的答案。问题是key.Name 可能并不是真正独一无二的,而index 肯定会是
    • 你的回答比我的更有意义(Y)
    • 谢谢,但你的不需要额外的属性,我喜欢这种方法。
    • 但是如果你在这个 plunker:plnkr.co/edit/DeDfOBTvERAZ2dlsttOF?p=preview 中看到它,它会捕获点击事件但不应用任何样式。
    【解决方案2】:

    您可以在 arrayOfKeys 中添加 setToolbarStyle 作为布尔属性。然后进行以下更改:

    <md-toolbar [ngClass]="{'toolBarColor': setToolbarStyle(key)}" 
                (click)="selectedToolbarValue(key.Name)" 
                *ngFor="let key of arrayOfKeys; let i=index">        
        <span>{{key.Name}}</span>
    </md-toolbar>
    

    在你的组件类中,定义方法setToolbarStyle(key):

    setToolbarStyle(key:any) : boolean {
        key.setToolbarStyle = true;
        return key.setToolbarStyle;
    }
    

    【讨论】:

    • 向 arrayofKeys 添加布尔属性意味着改变数组本身。数组本身非常复杂。您能否提出一些不会改变数组并仍然达到要求的东西。
    • 查看maximus的答案
    猜你喜欢
    • 1970-01-01
    • 2011-03-25
    • 2012-10-16
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2010-09-17
    • 2018-07-15
    相关资源
    最近更新 更多