Complex angular js ng-class

后端 未结 5 1414
暗喜
暗喜 2020-12-23 16:40

I have the component and have a problem setting the css class to it. I want it to always have a class of \"box\", then to have additional classes specified by the directive

相关标签:
5条回答
  • 2020-12-23 17:18

    A quick solution would be define the box class inside ng-class attribute:

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

    If you want to include a scope variable as a class, you can't use ng-class:

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

    Angular expressions do not support the ternary operator, but it can be emulated like this:

    condition && (answer if true) || (answer if false)

    0 讨论(0)
  • 2020-12-23 17:18

    Edit: for newer versions of Angular see Nitins answer as it is the best one atm

    For me, this worked (I'm working on AngularJS v1.2.14 at the moment so I guess 1.2.X+ should support this, not sure about the earlier versions):

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

    I replaced your {{class}} with {{myScopedObj.classesToAdd}} to show that any scoped variable or even a bit more complex object can be used this way.

    So, every DIV element crated this way will have "box" class and any class contained within myScopedObj.classesToAdd (useful when using ng-repeat and every element in the array needs to have a different class applied), and it will have the "mini" class if !isMaximized.

    0 讨论(0)
  • 2020-12-23 17:18

    You can use simple expression given below

    ng-class="{'active' : itemCount, 'activemenu' : showCart}"
    
    0 讨论(0)
  • 2020-12-23 17:24

    Another way to do this without double curly braces and includes scope variables, tested with angular v1.2+.

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

    It's also rather nice because the variable can use different types as a index without increasing complexity using ternaries. It can also remove any need for negations ;) Here is a fiddle link

    0 讨论(0)
  • 2020-12-23 17:27

    I needed multiple classes where one was $scope derived and others were literal classes. Thanks to the hint from Andre, below worked for me.

    <h2 class="{{workStream.LatestBuildStatus}}" 
        ng-class="{'expandedIcon':workStream.isVisible,  'collapsedIcon':!workstream.isvisible}">{{workStream.Name}}</h2>
    
    0 讨论(0)
提交回复
热议问题