Question

j'utilise Angular routage dans mon application ainsi que ngTable.Une de mes pages contient un ngTable, et un formulaire de recherche, où les données proviennent de la base de données en utilisant OBTENIR méthode (MongoDB) à chaque fois que je recherche, donc à chaque fois que je recherche le ngTable (table) doit être mis à jour, et mon problème est que la table n'est mise à jour qu'une seule fois, après le premier chargement de la page.

Le contrôleur utilisé pour la page partielle :

app.controller('SearchController',function($scope,ngTableParams,$http,$filter, $sce){

$scope.searching=function(){
    var str = $scope.search.tags;
    var TagsArry = str.split(",");

    $http.get('/api/GetDoc',{params:{title:$scope.search.title,tags:$scope.search.tags}})
        .success(function(data)
        {
            if(data.notExist!=-1){
                $scope.tableParams = new ngTableParams({
                    page: 1,            // show first page
                    count: 10           // count per page

                }, {
                    total: data.length, // length of data
                    getData: function($defer, params) {
                        $defer.resolve(data.slice((params.page() - 1) * params.count(), params.page() * params.count()));

                    }
                });
            }
          })
        .error(function(err){

        });
}
});
Était-ce utile?

La solution

J'avais le même problème.Vous devez recharger $scope.tableParams à chaque fois qu'une nouvelle recherche est effectuée, donc à chaque fois que vous cliquez sur le bouton de recherche.Un moyen simple de procéder consiste à envelopper $scope.tableParams.reload() dans une fonction, puis à appeler cette fonction lorsque vous cliquez sur votre bouton de recherche.

code du contrôleur :

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

Code HTML:

<button ng-click="doSearch()">Search</button>

Autres conseils

J'avais également le même problème.C'est un problème avec la directive ngTable.Il se met à jour uniquement lorsque data.length change.J'avais enfin résolu ce problème, ajoutez simplement cette ligne avant votre requête $http :

$scope['tableParams'] = {reload:function(){},settings:function(){return {}}};
$http.get('/api/GetDoc',{params:{title:$scope.search.title,tags:$scope.search.tags}})
    .success(function(data){
          /***** Your Code *********/
 });

Ce qu'il fait, c'est qu'il réinitialise les paramètres de la table ng, puis il s'initialise comme il le fait pour la première fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top