Angular 2将动态类分配给元素

Posted

技术标签:

【中文标题】Angular 2将动态类分配给元素【英文标题】:Angular 2 Assign dynamical Class to Element 【发布时间】:2017-03-22 22:12:53 【问题描述】:

我对 Angular 2 很陌生,我想为 html 元素分配一个类。 它应该是动态的 --> 如果另一个元素(带有 id)有一个属性,这个元素应该成为类。

这是我尝试过的代码:

<div class="panel panel-default" ngFor="let date of epgDates; let i = index">
    <div class="panel-heading" role="tab">
        <h4 class="panel-title">
            <a #aEle role="button" data-toggle="collapse" id="a-i" href="#i" aria-expanded="true"> 
                <span class="glyphicon" [class.glyphicon-minus]="aEle.getAttribute('aria-expanded')==='true'"
                    aria-hidden="true">
                </span> date | date: 'dd.MM.yyyy'
            </a>
        </h4>
    </div>
</div>

使用此代码我得到一个错误...:/ 有人可以帮我吗?

非常感谢!

【问题讨论】:

预期结果是什么。 [class.glyphicon-minus] 表示您想要添加/删除类 glyphicon-minus 但我完全不清楚 "#a-i.aria-expanded='true'" 应该做什么。 如果 id 为 a-i(例如 a-0)的元素的“aria-expanded”属性为真,则应添加该类。 【参考方案1】:

您不能同时使用[]。一个或另一个,但不能两者兼而有之

"true" 是返回true 的表达式时,这将设置类,否则将删除该类

[class.glyphicon-minus]="true"

这会在表达式 true 返回 true 时设置一个类 glyphicon-minus,否则会删除该类,并在第二个表达式返回 true 时设置或删除类 #a-1.aria-expanded,否则将其删除(假设 i1)。 类名可以是字符串('glyphicon-minus')或表达式('#a-' + i + '.aria-expanded'

[ngClass]="'glyphicon-minus': true, '#a-' + i + '.aria-expanded': true"

表达式true 和是一个文字布尔值(如图所示)或组件类的属性名称,或者是具有运算符和函数调用的更复杂的表达式。

更新

<a #aEle role="button" data-toggle="collapse" id="a-i" href="#i" aria-expanded="true">
    <span class="glyphicon" [class.glyphicon-minus]="aEle.getAttribute('aria-expanded')==='true'" aria-hidden="true"></span> 
    date | date: 'dd.MM.yyyy'
</a>

我将#aEle 模板属性添加到&lt;a&gt; 并使用它来获取aria-expanded 属性值。

【讨论】:

谢谢!但它仍然因失败而失败:'未处理的承诺拒绝:模板解析错误:解析器错误:缺少预期:在 ['glyphicon-minus': true, '#a-' + i + '.aria-expanded ': true] 在 ProgramComponent@28:104 (" ][ngClass]="'glyphicon-minus': true, '#a-' + i + '.aria-expanded': true" aria-hidden="true"> "): ProgramComponent@28:104' 第 33 列是什么?我找不到错误。我根据您在问题下方的评论更新了我的答案。 您更新的答案很好,它不会给出错误,但它有一个问题:因为 ''-Elemnt 在 ngFor 中,所以 '#aEle' 是重复的。 .. 我用整个 div 和 ngFor 更新了我的原始帖子......也许你也有解决方案......谢谢! 我认为整个方法是有缺陷的。为什么需要从&lt;a&gt; 元素中读取属性以了解“aria-expanded”是否设置为true,而不是读取aria-expanded 所依赖的属性?或者如果它总是正确的,就像在你的例子中一样,你为什么需要阅读它? 嗨,好的,我试着解释一下:当我点击一个按钮从 true 变为 false 时,'a'-Element 的 'aria-expanded' 属性发生了变化。基于此,我想显示一个带有“减号”类的跨度,但只是,如果“a”的“aria-expanded”属性为“true”......

以上是关于Angular 2将动态类分配给元素的主要内容,如果未能解决你的问题,请参考以下文章

在Angular2中有条件地分配类[重复]

Angular Firebase 存储,将用户输入属性分配给实时数据库

将样式应用于 Angular 2 中动态创建的元素

将组件分配给变量 Angular 4+

Angular 2 将表单分配给变量不起作用#f="form" (submit)="onSubmit(f.value)"

Angular 2+ - 在 HTML FORM 中动态添加 DOM 元素