21

我有一个 ng 表。我在一个控制器中有多个 ng 表。我正在为他们提供动态属性,即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 &nbsp;</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>

应用程序.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,每次点击我都想用新数据重新加载表。

4

4 回答 4

26

我遇到了一个非常相似的问题,我的表正在渲染但没有在操作时重新加载。您需要做的是每次单击按钮时重新加载 $scope.tableParams 。一种简单的方法是将 $scope.tableParams.reload() 包装在一个函数中,然后在单击按钮时调用该函数。

控制器代码:

$scope.doSearch = function () {
    $scope.tableParams.reload();
}

html代码:

<button ng-click="doSearch()">Search</button>
于 2014-04-28T16:20:32.263 回答
12

我终于解决了这个问题。

当我收到表的更新数据时,有必要重新加载表,如下所示:

$scope.tableData = data;

$scope.tableParams.total($scope.tableData.length);
$scope.tableParams.reload();
于 2015-03-18T12:26:06.577 回答
7

以防其他人碰到这个。我创建了自己的过滤器来创建一个新的大小数组。

我用了

$scope.tableParams.total(data.length)

在重新加载表之前更新长度。

于 2014-05-27T12:12:47.327 回答
0

这段代码对我有用,把它写在你的函数中——你可以在其中获取动态数据

  $scope.tableParams.reload();
  $scope.tableParams.page(1);
  $scope.tableParams.sorting({});
于 2016-10-04T18:07:02.490 回答