我是一名經驗豐富的C#和MVC程序員,但剛開始使用AngularJS。我一直在使用ngTable(無論如何),但有限的成功,但我無法解決的一個問題 - 無論我做什麼,我都無法在數據發生更改時得到一個特定的表來刷新。ngTable不會重新加載數據
我通過工廠從Web API獲取數據 - 這是與特定產品關聯的供應商列表。第一次加載屏幕時,數據被帶回並且表格顯示正常 - 任何後續調用,數據都會返回,但表格未更新。按預期更新頁面的其他區域。
我已經做了一些控制檯日誌記錄,可以看到數據回來了。我嘗試了tableParams.reload()
函數,並設置了tableParams.total()
,但似乎沒有任何東西觸發表刷新。
這是我在控制器功能:
function getStockSupplier() {
console.log("getStockSupplier()");
$scope.stockSupplierTableParams = {};
stockSupplier.getAll({ url: "localhost:52457", sku: $scope.model.sku })
.$promise.then(function (response) {
$scope.stockSupplier = response;
$scope.stockSupplierTableParams = new NgTableParams({
}, {
dataset: response
});
console.log("Got result");
console.log("Length: " + $scope.stockSupplierTableParams.settings().dataset.length);
$scope.stockSupplierTableParams.reload();
}, function (response) {
alert('no stock item');
$scope.stockSupplier = null;
});
}
,這是我的HTML代碼:
<div ng-controller="stockController">
<div>
<table ng-table="stockSupplierTableParams" class="table table-condensed table-bordered table-striped">
<tr ng-repeat="issue in $data">
<td data-title="'Supplier1'">
{{issue.SupplierName}}
</td>
<td data-title="'On Order'">
{{issue.OnOrder}}
</td>
</tr>
</table>
</div>
</div>
我在一個完全喪失 - 這可能是我丟失的東西根本,但它讓我瘋狂,所以任何幫助都非常感謝。
編輯:這是Web API服務調用的代碼,以防有任何相關性。另外,我應該指出,上面的HTML用在指令中,如果這有什麼區別的話。
var myService = angular.module('myService', ['ngResource']);
myService.factory('stockSupplier', [
'$resource',
function ($resource) {
return $resource('http://:url/api/StockInfo?Sku=:sku&StockSupplier=true',
{
url: '@url',
sku: '@sku'
},
{
getAll: {
method: 'GET',
isArray: true
},
});
}
]);
嗨 - 感謝您的回覆!我嘗試了你的建議,但沒有任何區別。我曾嘗試過使用ng,如果以前我認爲它可能會強制重繪,但是我將ng-if放在和$ scope中。$ apply()按照您的示例進行操作,並沒有什麼區別 - 表格仍然不會更新。事實上,我現在在$ apply()語句中的控制檯中出現錯誤,說'$ digest already in process'。欣賞這個建議, –
'$ promise'是什麼?爲什麼不只是「那麼」。我認爲它的問題 – Leguest
$ promise被使用,因爲它是對Web API的異步調用 - 如果我刪除它,我只是在控制檯出現錯誤,說'.then()不是函數'。爲了清楚起見,我會在服務代碼中添加原始問題。 –