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

ng-repeat排序箭头在javascript数据表中不起作用

阎枫涟
2023-03-14
问题内容

我对AngularJs和数据表很陌生。我需要使用ng-
repeat填充表行中的数据。我能够填充行并首次启用排序。当我单击箭头以升序或降序排序时,行数据消失了。

这是我的表数据

<table datatable="ng" id="example" class="display" cellspacing="0"    width="100%">
                <thead>
                    <tr>
                        <th class="col1">Campaign Name</th>
                        <th class="col4">Description</th>
                        <th class="col5">Activate/Deactivate</th>
                        <th class="col5">edit</th>
                        <!-- <th class="col5">status</th> -->
                        <!-- <th class="col5">Details</th> -->
                    </tr>
                </thead>
                <tbody >
                    <tr ng-repeat="campaign in campaignListData">
                             <td>{{campaign.campaignObject.campaignName}}</td>
                             <td>{{campaign.campaignObject.campaignMessage}}</td>
                            <td><button type="button" class="pay-amount pending" style="margin-top:-10px;margin-right:17px;width:128px;height:34px"
                            value = "{{ campaign.campaignObject.label }}" title="ACTIVATE" ng-click="updateCampaignStatus(campaign.campaignObject.id)">
                                <span style="margin-left:-10px;margin-right:17px;width:128px;height:34px">{{ campaign.campaignObject.label }}</span>
                                </button>
                            </td>
                            <td><a href="<c:url value="${contextPath}/merchant/manageCampaign/editCampaignConfiguration"/>?campaignId={{ campaign.campaignObject.id }}">
                                <img class="tableImage" style="margin-left:-8px;margin-top:-10px;" src="<c:url value="/resources/images/setting.png" />" ></a>
                            </td>
                    </tr>
                </tbody>
            </table>

这是我的排序javascript代码

<script type="text/javascript">
    $(document).ready(function() {
        $("#noCampaignData").hide();
        //$("#example_paginate").hide();
        var rowCount = $("#example tr").length;
        console.log("Row count value is"+rowCount);
        if (rowCount >= 0) {
            console.log("Entered into Sorting");
            $("#example").dataTable({
                "pagingType" : "full_numbers",
                "order" : [ [ 2, "desc" ] ]
            });
        }
    });
</script>

我得到tr的行数是1

我在页面底部包含了js文件

<script src="<c:url value="/resources/js/CampaignListController.js" />"></script>
<script src="<c:url value="/resources/js/jquery.dataTables.min.js" />"></script>

当我加载数据时,用ng-repeat进行精细加载。但是,当我单击标题以升序或降序排序时,行被擦除了。

请告诉我我做错了什么?我无法对数据的升序,降序和分页进行排序。

对不起我的英语不好。


问题答案:

没有冒犯,但这是jQuery和Angular思想的典型混合,或者是缺乏对Angular工作原理的理解。这里尝试将一些jQuery逻辑包装到角度摘要循环中

您永远无法$(document).ready(function(){与Angular相结合。实际上,您可以确定自己ready()在Angular完成ng-repeat业务之前就已经执行了很长时间。这就是为什么总要为行数(标题)获得1的原因,以及为什么单击标题时行不显示的原因。在获得行数时,没有插入任何行,并且在实例化时dataTable(),还没有插入行。

您可以$timeout用来强制延迟代码,或将其强制进入下一个摘要循环:

$scope.initDataTable = function() {
   $timeout(function() {
      $("#noCampaignData").hide();
      //$("#example_paginate").hide();
      var rowCount = $("#example tr").length;
      console.log("Row count value is"+rowCount);
      if (rowCount >= 0) {
         console.log("Entered into Sorting");
         $("#example").dataTable({
            "pagingType" : "full_numbers",
            "order" : [ [ 2, "desc" ] ]
         });
      }
   }, 200)
}

或创建一个由填充数据后实例化dataTable的指令ng-repeat,如ng-repeatfinish事件的多个答案所示:

.directive('repeatDone', function() {
    return function(scope, element, attrs) {
        if (scope.$last) { // all are rendered
            scope.$eval(attrs.repeatDone);
        }
    }
})

<tr ng-repeat="campaign in campaignListData" repeat-done="initDataTable">

$scope.initDataTable = function() {
      $("#noCampaignData").hide();
      $("#example").dataTable({
         ...
      });
}

希望这对您有所帮助。



 类似资料:
  • JavaScript箭头函数 let x = [1,2,3,4,5,6,7,8]; x.sort( (a,b) => b-a ); console.log(x); 实现逆序的原理是什么? 求大佬解惑

  • 问题内容: 我有一个HTML表格,想通过单击表格标题(在ctrl中)对记录(在ctrl中)进行排序, 任何人都可以解释为什么这样做有效: 那不是: 这是记录的代码: 我的表格中有58列,因此遍历表格标题会更好。 问题答案: 正如David所建议的,这可能与范围有关。由于ngRepeat创建了一个新的作用域,因此您需要为每个列标题设置和。 确保您在同一范围内修改值的一种方法是在该范围内创建一个函数,

  • 我有一个简单的循环与像这样: 控制器。 据我所知,Angular将首先呈现视图,并用数字替换插值的,然后,在单击事件中,将计算字符串。 在这种情况下,完全获得预期效果,即:

  • 作为概念证明,将模板字符串语法与Object.Prototype语法一起使用确实有效: 我是不是漏掉了一些明显的东西?我觉得示例2在逻辑上应该工作,但我对输出感到困惑。我猜这是一个范围问题,但我被输出“是一个未定义的”抛了出来。 ES6小提琴

  • 问题内容: 我正在尝试将AngularJS用于我的第一个项目(锦标赛经理),并且筛选器不起作用:(我已阅读了有关该文档的所有文档,但无济于事:/ 所以,我在上面定义了vars : 现在,在我看来,我正在尝试重新排序(首先只有一个订单项),但是再也无法工作… 第二次,我要重新排序,从2条信息:和如果第一是平等的。我尝试更换这样的,但如果一个代码没有工作,他绝不会与2工作… 谢谢大家的阅读,对于帖子的

  • 问题内容: 我有一张桌子,其中的行通过重复。我正在尝试创建一个模板,为每一行生成列 问题是我的自定义td模板根本没有呈现。在这里,我打算用n个s 代替- 这将根据我的数据对象上的属性数量来确定,但是目前,我只是试图获得一个简单的指令,该指令将输出两列。 MYPLUNKER:显示此问题的一个实例和指令代码。 问题答案: 如注释中所指出,指令模板应具有单个根元素。因此,我建议您将元素移动到指令的模板,