我对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:显示此问题的一个实例和指令代码。 问题答案: 如注释中所指出,指令模板应具有单个根元素。因此,我建议您将元素移动到指令的模板,