我有一张ng-table。我在一个控制器内有多个ng-table。我给动态属性,即 ng-table =“tableParams2”或ng-table =“tableParams3”等。 我正在按钮点击功能上发出ajax请求来更新数据。我的http请求正在后端发送。在我点击3-4次后,我在控制台中看到我的表被重新加载。通过数据后,我的数据保持不变,我没有在表中看到重新加载的内容。以下是我的代码:
HTML:
<button ng-click="qualifyX(2)" ></button>
<div class="dragable modal hide fade ui-draggable in" id="ptn_popup" aria-hidden="false" data-backdrop="false">
<div class="modal-header">
<a class="close" data-dismiss="modal" data-original-title="" title="">×</a>
<h4>Possible matched Companies</h4>
</div>
<div class="modal-body" style="padding: 10px;">
<div id="ptn_qualify_res" class="grid-view">
<div class="summary"></div>
<table ng-table="tableParams2" show-filter="true" class="items table table-striped table-bordered table-condensed">
<tr ng-repeat="business in $data">
<td data-title="'Primary Trading Name'" sortable="'primary_trading_name'" filter="{ 'primary_trading_name': 'text' }">
{{business.primary_trading_name}}
</td>
<td data-title="'Primary Entity Name'" sortable="'primary_entity_name'" filter="{ 'primary_entity_name': 'text' }">
{{business.primary_entity_name}}
</td>
<td data-title="'Business Name(s)'" sortable="'business_names'" filter="{ 'business_names': 'text' }">
{{business.business_names}}
</td>
<td data-title="'Other Trading Name(s)'" sortable="'other_trading_names'" filter="{ 'other_trading_names': 'text' }">
{{business.other_trading_names}}
</td>
<td data-title="'State'" sortable="'state'" filter="{ 'state': 'text' }">
{{business.state}}
</td>
<td style="width:70px;">
<a data-dismiss="modal" href="javascript:void(0)" data={{business.business_id}} class="ptn_qualify_view_link">
<button type="button" class="btn btn-mini"><i class="icon-eye-open"></i> View </button>
</a>
</td>
</tr>
</table>
</div>
</div>
<div class="modal-footer">
<a data-dismiss="modal" class="btn" id="yw11" href="javascript:void(0);" data-original-title="" title="">Close</a>
</div>
</div>
App.js
$scope.qualifyX = function(busID) {
var penModal = $('#popups_container' + busID + ' #pen_popup');
var pen = $('#popups_container' + busID).next().find('input#Custombusiness_primary_entity_name').val();
var selectors = {pen: pen, penModal: penModal};
$http.get(getPtnData + '?ptn=' + selectors.ptn).success(function(data) {
selectors.ptnModal.find('#ptn_qualify_res').removeClass('grid-view-loading').addClass('grid-view');
$scope['tableParams' + busID] = new ngTableParams(
{
page: 1, // show first page
count: data.length, // count per page
sorting:
{
primary_trading_name: 'asc' // initial sorting
}
}, {
total: 0, // length of data
getData: function($defer, params) {
var filteredData = params.filter() ?
$filter('filter')(data, params.filter()) :
data;
var orderedData = params.sorting() ?
$filter('orderBy')(filteredData, params.orderBy()) :
data;
params.total(orderedData.length); // set total for recalc pagination
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
});
};
创建一个有点类似的Plunker,每次点击我想用新数据重新加载表。
答案 0 :(得分:26)
我遇到了一个非常类似的问题,我的表正在渲染,但没有重新加载动作。您需要做的是每次单击按钮时重新加载$ scope.tableParams。一个简单的方法是将$ scope.tableParams.reload()包装在一个函数中,然后在单击该按钮时调用该函数。
控制器代码:
$scope.doSearch = function () {
$scope.tableParams.reload();
}
html代码:
<button ng-click="doSearch()">Search</button>
答案 1 :(得分:12)
我最终解决了这个问题。
当我收到表格的更新数据时,必须按如下方式重新加载表格:
$scope.tableData = data;
$scope.tableParams.total($scope.tableData.length);
$scope.tableParams.reload();
答案 2 :(得分:7)
万一其他人点击这个。我创建了自己的过滤器,创建了一个新的大小数组。
我用过
$scope.tableParams.total(data.length)
在重新加载表之前更新长度。
答案 3 :(得分:0)
此代码适用于我, 将它写在你的功能中 - 你获得动态数据
$scope.tableParams.reload();
$scope.tableParams.page(1);
$scope.tableParams.sorting({});