What angularjs expression syntax is this in ng-class

前端 未结 5 1260
渐次进展
渐次进展 2021-01-30 13:04

The AngularJS Noob Handbook has some code which reduces class manipulation to a simple expression and binding :

...&         


        
相关标签:
5条回答
  • 2021-01-30 13:39

    you've probably also seen something like this:

    <div ng-class="{true: 'complete'}[item.Id != 0]"></div>
    

    Very rad syntax.

    EDIT: What happens here, is that the "complete" class is added to the element if(item.Id != 0). Alternatively, we could write: <div ng-class="{false: 'cookieless'}[monsterEatsCookies('Elmo')]. As its decided by the monsterEatsCookies function, Elmo does not eat cookies so since this function returns false the html element gains a class called cookieless.

    A simple example: <div ng-class="{false: 'DoubleNegative'}[1 == 0]. 1 !== 0 which is "false" -- the "DoubleNegative" class is added to the element.

    <div ng-class="{  true:   'complete'  } [item.Id != 0]"></div>
    

    `

                | |      | |          | | |            |
                | |result| |className | | |            |
                |                     | | |            |
                |       function      | | | condition  |
    

    Addendum

    Also, I just realized that you can use a variety of different keys to map to your condition. For example:

    ng-class="{ true: 'highlight', undefined: 'mute' }[ item.hasValue ]"

    The mute class will be applied if item has no "hasValue" property. Furthermore, you can apply a class for any given type or value:

    {'Jonathan Chapman': 'embolden', '[object Object]': 'hide'}[ item.toString() ]

    In the following collection, this would embolden a person's name while hiding items that are objects:

    [
        'Jonathan Chapman',
        { aka: 'Johnny Applyseed' },
        'Brad Pitt',
        { details: 'Fights Zombies' }
    ]
    

    With this, you could watch for specific values in any $scope property. I suppose this could come in very handy at times.

    Cheers

    0 讨论(0)
  • 2021-01-30 13:43

    This is mentioned briefly (too briefly, in my opinion) in the ngClass documentation. If you pass an object to ngClass, then it will apply each key of the object as a class to the element if that key's value is true. For example:

    $scope.first = true
    $scope.second = false
    $scope.third = true
    

    with

    <div ng-class="{a: first, b: second, c: third}"></div>
    

    would result in

    <div class="a c"></div>
    
    0 讨论(0)
  • 2021-01-30 13:50
    ng-click="flags.open=!flags.open"
    

    switch the value of the flags.open to true or false.
    And

    ng-class="{active:flags.open}"  
    

    decides whether the class active is present or not based on the value of flags.open.
    Please see the Fiddle demonstrating the above example.

    0 讨论(0)
  • 2021-01-30 13:50

    Here's how you can pass expression with filter:

     <div ng-class="{ 'customer-page': ('customer' | isRoute), 
      'orders-page': ('orders' | isRoute)  }">....</div>
    
    0 讨论(0)
  • 2021-01-30 13:58

    like this example below :

    div(ng-class=" condition ? ['class_one', 'class_two'] : ['class_three', 'class_four']")
    
    0 讨论(0)
提交回复
热议问题