Je suis un programmeur C# et MVC expérimenté, mais je commence tout juste avec AngularJS. J'utilise ngTable (en essayant de toute façon) avec un succès limité, mais un problème que je ne peux pas résoudre - peu importe ce que je fais, je n'arrive pas à actualiser une table particulière lorsque les données ont changé.ngTable ne recharge pas les données
Je reçois des données d'une API Web via une usine - c'est une liste de fournisseurs associés à un produit particulier. La première fois que l'écran est chargé, les données sont ramenées et la table s'affiche correctement - tout appel ultérieur, les données sont renvoyées, mais la table n'est pas mise à jour. Les autres zones de la page sont mises à jour comme prévu.
J'ai effectué une journalisation de la console et je peux voir que les données reviennent. J'ai essayé la fonction tableParams.reload()
, et en réglant le tableParams.total()
mais rien ne semble déclencher la table à actualiser.
C'est ma fonction dans le contrôleur:
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;
});
}
Et voici mon code 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>
Je suis à une perte complète - il peut être quelque chose de fondamental qui me manque , mais ça me rend fou, donc toute aide est appréciée.
EDIT: Voici le code de l'appel du service API Web, au cas où cela aurait un intérêt. En outre, je dois souligner que le HTML ci-dessus est utilisé dans une directive, si cela fait une différence.
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
},
});
}
]);
Salut - merci pour la réponse!J'ai essayé ce que tu as suggéré mais ça ne fait aucune différence. J'ai essayé de faire ng-si moi-même avant, pensant que cela pourrait forcer un redessin, mais j'ai mis le ng-if et $ scope. $ Apply() selon votre exemple et cela ne fait aucune différence - la table ne se met toujours pas à jour . En fait, je reçois maintenant une erreur dans la console de l'instruction $ apply() en disant '$ digest déjà en cours'. Appréciez cependant la suggestion, –
Qu'est-ce que '$ promise'? Pourquoi ne pas simplement ".then". Je pense que le problème est – Leguest
$ promesse est utilisé parce que c'est un appel asynchrone à l'API Web - si je le supprime, je reçois juste une erreur dans la console en disant que '.then() n'est pas une fonction'. Je vais ajouter dans mon code de service à la question originale pour plus de clarté. –