angularjs - 具有动态值和条件的 ng-class

标签 angularjs

在我的 Controller 中,有 2 个变量跟踪表的排序状态:

/* sorting */
$scope.sortField = 'code';
$scope.sortDir = 'asc';

在CSS中有3个不同的类代表排序状态:

table.table thead .sorting { ...} /*sorting disabled*/
table.table thead .sorting_asc { ... } /*sorting asc*/
table.table thead .sorting_desc { ... } /*sorting desc*/

我想使用 ng 类表达式来动态更改表格列上的排序图标,这是 html:

<thead>
  <tr>
    <th ng-class="" ng-click="sortBy('code')">Summit code</th>
    <th ng-class="" ng-click="sortBy('name')">Name</th>
    <th ng-class="" ng-click="sortBy('height')">Height</th>
    <th ng-class="" ng-click="sortBy('points')">Points</th>
  </tr>
</thead>

这是一个可能的实现(不是很聪明)

<thead>
  <tr>
    <th ng-class="{sorting_asc: (sortField == 'code' && sortDir == 'asc'), sorting_desc: (sortField == 'code' && sortDir == 'desc'), sorting: (sortField != 'code')}"  ng-click="sortBy('code')">Summit code</th>
    <th ng-class="{sorting_asc: (sortField == 'name' && sortDir == 'asc'), sorting_desc: (sortField == 'name' && sortDir == 'desc'), sorting: (sortField != 'name')}" ng-click="sortBy('name')">Name</th>
    <th ng-class="{sorting_asc: (sortField == 'height' && sortDir == 'asc'), sorting_desc: (sortField == 'height' && sortDir == 'desc'), sorting: (sortField != 'height')}" ng-click="sortBy('height')">Height</th>
    <th ng-class="{sorting_asc: (sortField == 'points' && sortDir == 'asc'), sorting_desc: (sortField == 'points' && sortDir == 'desc'), sorting: (sortField != 'points')}" ng-click="sortBy('points')">Points</th>
  </tr>
</thead>

最佳答案

您应该将类​​分开,一个用于 .sorting,另一个用于 .asc 和 .desc,例如

.sorting {  /* sorting disabled */ }
.sorting.asc   {   /* put the asc icon, will inherit everything else from sorting */ }
.sorting.desc   {   /* put the desc icon, will inherit everything else from sorting */ }

然后应用带有映射的ng-class

<thead>
  <tr>
    <th ng-class="{sorting: (sortField == 'code'), asc: (sortDir == 'asc'), desc: (sortDir == 'desc')}" ng-click="sortBy('code')">Summit code</th>
    <th ng-class="" ng-click="sortBy('name')">Name</th>
    <th ng-class="" ng-click="sortBy('height')">Height</th>
    <th ng-class="" ng-click="sortBy('points')">Points</th>
  </tr>
</thead>

关于angularjs - 具有动态值和条件的 ng-class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16982402/

相关文章:

javascript - 如何在页面上粘贴相应的组

javascript - angularjs 1.5 组件一种方式绑定(bind)不适用于 setInterval

javascript - 当 slider 停止在 angle-rangeslider 中时如何调用函数

angularjs - 使用 AngularJS 进行身份验证、使用 REST Api WS 进行 session 管理和安全问题

javascript - AngularJS 在路由更改之前确认

javascript - 不满足条件时如何使用 ng Show/ng Hide 隐藏 DOM 元素?

javascript - 无法在标题应用程序下获取 ui-router 显示 View

javascript - 向 d3 图表添加一条水平线显示错误的值

regex - 正则表达式匹配字符串中任意位置的一定数量的数字

javascript - 如何在不点击 Angular 情况下标记多个元素?