在表内的行上使用 ng-repeat 和 ng-class

Posted

技术标签:

【中文标题】在表内的行上使用 ng-repeat 和 ng-class【英文标题】:Using ng-repeat and ng-class on rows inside a table 【发布时间】:2013-03-02 21:12:13 【问题描述】:

我正在使用 AngularJS,并且我想要获得的效果与它会产生的效果相似,假设它会起作用(它不会起作用)。

查看

<tr ng-repeat='person in people' ng-class='rowClass(person)'>
  <td>.....info about person...</td>
  <td>.....info about person...</td>
  <td>.....info about person...</td>
</tr>

控制器

$scope.rowClass = function(person)
  ...return some value based upon some property of person...

我意识到这段代码不起作用,因为personng-class 不可用,因为它只对每行内的对象可用。代码是为了了解我想要做的事情:即。我希望能够拥有使用ng-repeat 创建的表行,其类也基于一个条件,该条件取决于对行本身的范围特性的访问,例如。 person。我意识到我可以在列上添加 ng-class,但这很无聊。谁有更好的主意?

【问题讨论】:

How do I conditionally apply CSS styles in AngularJS? 的可能重复项 【参考方案1】:

通常我喜欢给出更全面的答案,但是这部分涉及的代码太多,无法做到这一点。所以只会展示什么是最重要的,并希望看到这个的任何人都知道如何使用它。我的动态 JSON 数组中既有列又有行,但对这一位重要的是 ng-show="$last"。这应该只显示动态 JSON 数组中的最后一行。

<tr ng-repeat="row in table.rows" ng-show="$last">

   <td ng-repeat="column in table.cols" ng-show="column.visible == true" nowrap >row[column.columnname]</td>
</tr>

【讨论】:

【参考方案2】:

这实际上应该可以正常工作。 Person 应该在 tr 元素及其子元素上可用,因为它们共享相同的范围。

这对我来说似乎很好用:

<table>
    <tr ng-repeat="person in people" ng-class="rowClass(person)">
        <td> person.name </td>
    </tr>
</table>

http://jsfiddle.net/xEyJZ/

【讨论】:

【参考方案3】:

实际上,您可以在您所指的上下文中使用“人”。它存在于被重复的项目以及其中的任何项目上。原因是特定元素上的任何指令共享相同的 $scope 对象。 ng-repeat 的优先级为 1000,所以它已经创建了它的 $scope 并将“person”放入其中,因此 ng-class 可以使用“person”。

查看此 Plnkr:

http://plnkr.co/edit/ZI5Pv24U01S9dNoDulh6

【讨论】:

以上是关于在表内的行上使用 ng-repeat 和 ng-class的主要内容,如果未能解决你的问题,请参考以下文章

如果条件在表内

如何使用ng-repeat在表中显示数组

Angular js,未在表中显示套接字数据(ng-repeat)

如何将表内的属性引用到同一表内新行内的值

使用 Follow-Sibling PYTHON 单击表内的按钮

是否有一种直接的方法来选择 jqGrid 中组内的行?