当前位置: 首页 > 面试题库 >

AngularJS表排序与ng-repeat

荆弘伟
2023-03-14
问题内容

我有一个HTML表格,想$scope.records通过单击表格标题($scope.headers在ctrl中)对记录(在ctrl中)进行排序,

任何人都可以解释为什么这样做有效:

<th>
    <a ng-click="sortColumn=headers[0];reverse=!reverse">{{ headers[0] }}</a>
</th>
<th>
    <a ng-click="sortColumn=headers[1];reverse=!reverse">{{ headers[1] }}</a>
</th>

那不是:

<th ng-repeat="header in headers">
    <a ng-click="sortColumn=headers[$index];reverse=!reverse">{{ headers[$index] }}</a>
</th>

这是记录的代码:

<tr ng-repeat="arr in records | orderBy:sortColumn:reverse">
    <td ng-repeat="val in arr" ng-bind-html-unsafe="arr[headers[$index]]</td>
</tr>

我的表格中有58列,因此遍历表格标题会更好。


问题答案:

正如David所建议的,这可能与范围有关。由于ngRepeat创建了一个新的作用域,因此您ngClick需要为每个列标题设置sortColumnreverse

确保您在同一范围内修改值的一种方法是在该范围内创建一个函数,并在ngClick中调用该函数以传递索引:

$scope.toggleSort = function(index) {
    if($scope.sortColumn === $scope.headers[index]){
        $scope.reverse = !$scope.reverse;
    }                    
    $scope.sortColumn = $scope.headers[index];
}

以此作为您的标记:

<th ng-repeat="header in headers">
    <a ng-click="toggleSort($index)">{{ headers[$index] }}</a>
</th>

这是一个例子。

另一个选择是绑定到这样的非原始类型(子作用域将访问同一对象):

$scope.columnSort = { sortColumn: 'col1', reverse: false };

以此作为您的标记:

<th ng-repeat="header in headers">
    <a ng-click="columnSort.sortColumn=headers[$index];columnSort.reverse=!columnSort.reverse">{{ headers[$index] }}</a>
</th>

这是一个例子。



 类似资料:
  • 问题内容: 我想显示“附件”部分的表格格式。我有查询和结果数据。两者都有一个共同的列。我想显示基于ID的附件类别描述。在我尝试过的尝试中,它没有用。 我在中使用一个函数,希望方法错误,期望该方法有一个替代方案。 该包含, 和来自数据库的数据一样, HTML代码为 控制器的代码是 样本柱塞:http ://plnkr.co/edit/dZy5gW4q9CxWF2NszXYc 问题答案: 括号是否经过

  • 问题内容: 我正在尝试对从JSON源填充的数据表进行排序。我的代码如下: HTML: JS: 小提琴:http : //jsfiddle.net/7czsM/1/ 如您所见,我试图将click函数添加到表标题中,以调用对数据进行排序的函数,但是它不起作用。 我已经在这里看到了这种方法的示例,该示例可以起作用:http : //jsfiddle.net/vojtajina/js64b/14/,但是当

  • 问题内容: 我有四个表头: 我希望能够通过单击标题对表格进行排序。 所以如果我的桌子是这样的 然后我点击 我的桌子现在看起来像这样: 也就是说,每列的内容永远不会改变,但是通过单击我要对列进行排序的标题,行将自行重新排序。 我的表的内容是通过Mojolicious完成的数据库调用创建的,并通过以下方式返回到浏览器: 我拼凑的其余代码看起来像这样: 从现在开始,如何通过单击表顶部的标题来对列进行排序

  • 问题内容: 随着我使用的方式如下: 我想知道是否可以使用该表达式执行与此类似的操作: 因此,无论何时不同于或使用并避免指定每个值? 问题答案: 使用嵌套的嵌入式if-then语句( 三元运算符 ) 例如 : 并确保 您的同事可读 :)

  • 问题内容: 我一直试图用来显示选择中的字体数组,该数组按字母顺序按数组中各项的值排序。 HTML JS 我尝试过更改其他方面的价值。我已经阅读了文档和所有评论。 我想念什么?这应该只适用于对象吗? 问题答案: 这是您需要做的: 您需要添加ng-model才能正确使绑定适用于字符串列表。 您可以使用排序来确定输入内容是否包含字符串列表。由于的表达式可以是Getter函数。该函数的结果将使用<,=,>

  • 问题内容: 我正在尝试按属性对一些数据进行排序。这是我tought应该可以工作的示例,但事实并非如此。 HTML部分: JS部分: 结果: A-> AData B-> BData C-> C数据 …恕我直言,应如下所示: C-> C数据 B-> BData A-> AData 我是否错过了某些东西(可以在这里进行JSFiddle的实验)? 问题答案: AngularJS的orderBy过滤器仅支持