2016-06-29 1 views
6

Ich benutze ng-Tabelle für Admin und Benutzer mit dem gleichen Controller, gleiche Ansicht aber geladene Daten mit anderen URL, aber beim Abrufen von Daten aus dem Cache lädt es Daten aus dem Cache, (was ich will klar, wenn sich der Benutzer abmeldet)Ich benutze ng-Tabelle für Admin und Benutzer mit unterschiedlicher Quelle. Autor Daten zeigt in Admin, bis aktualisieren

-Controller

myApp.controller('listArticle', ['$scope', '$filter', 'ngTableParams', 'nameService', '$rootScope', '$location', '$timeout', '$cookieStore', 'flashService', '$templateCache', 
function ($scope, $filter, ngTableParams, nameService, $rootScope, $location, $timeout, $cookieStore, flashService, $templateCache) 
{ 
    //$templateCache.removeAll(); 
    $scope.success = {}; 
    $scope.article = {}; 
    $scope.article.edit = '-'; 
    $scope.article.approve = '-'; 
    $scope.article.view = 'view'; 
    $scope.showAlert = true; 
    flashService.displayAlertMessages(); 

    $scope.tableParams = new ngTableParams(
      { 
       page: 1, // show first page 
       count: 10, // count per page 
       sorting: {name: 'asc'} 
      }, 
      { 
       total: 0, // length of data 
       getData: function ($defer, params) 
       { 
        nameService.getData($defer, params, $scope.filter); 
       }, 
       counts: [], 
       paginationMaxBlocks: 13 
      }); 

    $scope.$watch("filter.$", function() 
    { 
     $scope.tableParams.reload(); 
    }); 

}]); 

Dienst

myApp.service("nameService",['$http','$filter','$cookieStore', '$rootScope', function($http, $filter, $cookieStore, $rootScope){ 

    function filterData(data, filter) 
    { 
     return $filter('filter')(data, filter); 
    } 

    function orderData(data, params) 
    { 
     return params.sorting() ? $filter('orderBy')(data, params.orderBy()) : filteredData; 
    } 

    function sliceData(data, params) 
    { 
     return data.slice((params.page() - 1) * params.count(), params.page() * params.count()); 
    } 

    function transformData(data,filter,params) 
    { 
     return sliceData(orderData(filterData(data,filter), params), params); 
    } 

    var service = 
    { 
     cachedData:[], 
     getData:function($defer, params, filter) 
     { 
       if(service.cachedData.length>0) 
       { 
        var filteredData = filterData(service.cachedData,filter); 
        transformedData = sliceData(orderData(filteredData,params),params); 
        params.total(filteredData.length); 
        $defer.resolve(transformedData); 
       } 
       else 
       { 
        var id = $cookieStore.get('userId'); 
        if($rootScope.role == 1) 
        { 
          var url = "article/serverside/fetch-pending-list.php"; 
          var data = ""; 
        } 
        else 
        { 
          var url = "article/serverside/fetch-list.php"; 
          var data = {id:id}; 
        } 

        $http.post(url,data) 
        .success(function(resp) 
        { 
          var i=0; 
          for(i=0; i<resp.length; i++) 
          { 
           resp[i].status = parseInt(resp[i].status); 
           resp[i].category = parseInt(resp[i].category); 

           if($rootScope.role > 1) 
             resp[i].edit = (resp[i].status == 1)?"Edit":""; 
           else{ 
             resp[i].approve = (resp[i].status == "2")?"Approve/Reject":""; 
           } 

           var j=0; 
           var k=0; 
           for(j=0;j<statusList.length;j++){ 
             if(statusList[j]['id'] == resp[i].status) 
              resp[i].status = statusList[j]['title']; 
           } 

           for(k=0;k<categories.length;k++){ 
             if(categories[k]['id'] == resp[i].category) 
              resp[i].category = categories[k]['title']; 
           } 
          } 
          angular.copy(resp,service.cachedData); 
          params.total(resp.length); 
          var filteredData = $filter('filter')(resp, filter); 
          transformedData = transformData(resp,filter,params); 

          $defer.resolve(transformedData); 
        }); 
       } 
     } 
    }; 
    return service; 

}]);

Hinweisif(service.cachedData.length>0) Dieser Ort gleiche auf beiden geladenen Daten logins.Also mögen, Wenn ich eine Form von Daten speichern und leiten die Liste ng-Tabelle nicht aktualisiert wird, da sie Daten aus dem Cache nicht von der Quelle lädt.

+0

Warum fügst du keine Benutzeranmeldung als Parameter zu deiner Datenquellen-URL hinzu, wie 'getdata.php? Login = blabla'? – skobaljic

+0

Ich möchte meine URL nicht so machen. Auch wenn es einen NG-Tisch gibt, muss es etwas geben, um diese Caches zu löschen, und ich frage mich, was das ist? – Abel

Antwort

2

Sie sollten das cachedData-Array explizit löschen, wenn sich der Benutzer abmeldet, damit der neue Benutzer ein neues Array von zwischengespeicherten Objekten erhält.

Oder speichern Sie die CachedData mit Schlüsselweg. z.B.

cachedData=[{"user" : '123', 'data':[{}]}, 
"user" : '234', 'data':[{}] 
] 

Dies wird einige Komplikationen hinzufügen, da Sie CachedData basierend auf Benutzer-ID abfragen müssen.

Warum verwenden Sie eckigen Cache-Dienst, der dies automatisch funktioniert (d. H. Es erstellt separaten Cache für verschiedene URLs). https://github.com/jmdobry/angular-cache

Bearbeiten: Um den Cache beim Abmelden zu löschen; Wenn Sie über einen Auth-Controller verfügen (der Controller, der die Anmelde- und Abmeldeaktion verarbeitet). Inject den NameService in den Controller Wenn Sie auf Logout klicken, können Sie einfach nameService.cachedData = [] schreiben.

+0

Wie werden diese zwischengespeicherten Daten gelöscht? – Abel

+0

@ Abel- Wenn Sie einen Auth-Controller haben (den Controller, der die An- und Abmeldeaktion handhabt). Inject den NameService in den Controller Wenn Sie auf Logout klicken, können Sie einfach nameService.cachedData = [] schreiben. – Mahesh

+0

Feiner Bruder, wie du gesagt hast, ich räume es beim Logout ab. Bitte bearbeiten Sie Ihre Antwort gemäß dem Kommentar. Ich werde darauf Bounty hinzufügen. (Noch bin ich interessiert an der Sache, wie kann ich Cache löschen? Will nur wissen) – Abel

Verwandte Themen