【问题标题】:Complex angular js ng-class复杂的角度js ng-class
【发布时间】:2012-11-28 14:37:24
【问题描述】:

我有该组件,但在为其设置 css 类时遇到问题。 我希望它总是有一个“box”类,然后有由指令“class”参数和一个条件类“mini”指定的其他类。

从概念上讲,我想要实现的是这样的:

<div class="box {{class}}" data-ng-class="{mini: !isMaximized}">
...
</div>

问题是我在设置class html属性时,省略了ng-class属性。 如何在不更改控制器的情况下使我的示例工作?是否有可能,或者我应该在控制器中设置类(我希望避免)?

【问题讨论】:

  • 看起来这不再是最新的 Angular.js 版本和上面的示例开箱即用的问题了。

标签: angularjs ng-class


【解决方案1】:

一个快速的解决方案是在 ng-class 属性中定义 box 类:

<div data-ng-class="{mini: !isMaximized, box: true}"></div>

如果你想包含一个作用域变量作为一个类,你不能使用 ng-class:

<div class="{{class}} box {{!isMaximized && 'mini' || ''}}">

Angular 表达式不支持三元运算符,但可以这样模拟:

条件&&(如果为真则回答)|| (如果为假,请回答)

【讨论】:

  • 如何分配用户指定的属性:{{class}}?
  • 修改了我的回复以包含用户指定的类。
  • 你,太棒了!这救了我:“如果你想包含一个范围变量作为一个类,你不能使用 ng-class”
  • 另外,AngularJS 现在有了三元条件运算符。
  • @SiCK 请不要编辑代码,尤其是当您的编辑完全不正确时。
【解决方案2】:

我需要多个类,其中一个是 $scope 派生的,其他是文字类。感谢 Andre 的提示,下面对我有用。

<h2 class="{{workStream.LatestBuildStatus}}" 
    ng-class="{'expandedIcon':workStream.isVisible,  'collapsedIcon':!workstream.isvisible}">{{workStream.Name}}</h2>

【讨论】:

  • 在较新版本的 Angular 中,这确实有效,是解决问题的最佳方法。
【解决方案3】:

编辑:对于较新版本的 Angular,请参阅 Nitins answer,因为它是最好的 atm

对我来说,这行得通(我目前正在开发 AngularJS v1.2.14,所以我猜 1.2.X+ 应该支持这个,不确定早期版本):

<div class="box" data-ng-class="{ {{myScopedObj.classesToAdd}}: true, mini: !isMaximized }"></div>

我用{{myScopedObj.classesToAdd}} 替换了您的{{class}},以表明可以以这种方式使用任何范围变量甚至更复杂的对象。

因此,以这种方式创建的每个 DIV 元素都将具有“box”类和包含在 myScopedObj.classesToAdd 中的任何类(在使用 ng-repeat 并且数组中的每个元素都需要应用不同的类时很有用),并且它将如果!isMaximized 有“迷你”课程。

【讨论】:

  • 有了这个,我可以做类似的事情:&lt;div class="property" ng-repeat="property in properties" title="{{property.name}}" ng-class="{ 'property-{{$index}}': true, 'property-timestamp': property.name=='timestamp'}"&gt;
【解决方案4】:

另一种不使用双花括号并包含范围变量的方法,使用 angular v1.2+ 进行测试。

<div ng-class="['box', 
                aClass, 
               {true:'large': false: 'mini'}[isMaximized]]"></div>

这也相当不错,因为变量可以使用不同的类型作为索引,而不会增加使用三元组的复杂性。它还可以消除对否定的任何需求;) Here is a fiddle link

【讨论】:

    【解决方案5】:

    你可以使用下面给出的简单表达式

    ng-class="{'active' : itemCount, 'activemenu' : showCart}"
    

    【讨论】:

      猜你喜欢
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      相关资源
      最近更新 更多