在 ng-class 中删除和添加类

Posted

技术标签:

【中文标题】在 ng-class 中删除和添加类【英文标题】:Removing and adding classes inside an ng-class 【发布时间】:2019-02-21 11:20:32 【问题描述】:

有一些包含 ng-class 的元素,其工作方式类似于三元运算符:

ng-class="$ctrl.something ? 'fa-minus' : 'fa-plus'"

例如,为了访问它们,可以将所有具有fa-minus 的元素存储到一个列表中:

const elementList = document.querySelectorAll('.fa-minus');

我的问题是是否可以在 ng-class 中进行修改。例如,对于所有具有fa-minus 的元素,将其更改为fa-square

之后我尝试了几种方法,例如删除和添加类:

    const elementList = document.querySelectorAll('.fa-minus');
    document.forEach(document=> document.classList.remove('.fa-minus'));
    document.forEach(document=> document.classList.add('fa-square'));

不起作用,可能是因为原来的那个是 ng-class 而不是经典的 css 类。

不应该改变原来的ng-class。我只想在创建导出文件的函数中更改它

有没有办法解决这个问题?

【问题讨论】:

【参考方案1】:

在使用 AngularJS 时避免直接的 DOM 操作。您可以使用以下代码以角度方式执行此操作。

HTML

ng-class="$ctrl.getClass()"

控制器

var $ctrl = this;
var MINUS = 'fa-minus';
var PLUS = 'fa-plus';

getClass () 
   return $ctrl.something ? MINUS : PLUS


changeMinusClass(newClass) 
   MINUS = newClass


onClickOfSomething () 
   this.changeMinusClass('fa-square')

【讨论】:

它不应该改变原来的ng-class。我只想在创建导出文件的函数中更改它 @LeoMessi 哦,伙计。请在初始级别的问题中提及这些重要的事情。请更新您的问题【参考方案2】:

你可以remove()add() 之前的类。您不应使用 document 作为变量的名称。此外,使用与处理函数的参数相同的名称也不是一个好习惯。

以下示例显示了如何做到这一点:

var d = document.querySelectorAll('span');
d.forEach(el=> 
  el.classList.remove('fa-minus');
  el.classList.add('fa-square');
);

// for demonstration
document.querySelectorAll('span').forEach(s => console.log(s.getAttribute('class')));
<span class="fa-minus">Test 1</span>
<span class="fa-minus">Test 2</span>

【讨论】:

@LeoMessi,请不要在同一行中使用这两个函数。使用像我更新的答案这样的个人陈述..... @LeoMessi,我有点惊讶。我希望我能看到现场!

以上是关于在 ng-class 中删除和添加类的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS ng-class 添加类但在更改时不删除它

使用 ng-class 添加多个类

使用 ng-click 在 angularJs 中添加和删除类

ng-class 在表的第一行有类并在 ng-click 上将其删除

如何在angularjs中动态地将样式属性添加到具有ng-class的元素

带有 ng-class 指令的 ng-animate