2016-06-29 3 views
6

रीफ्रेश तक व्यवस्थापक डेटा दिखाता है, मैं व्यवस्थापक और उपयोगकर्ता के लिए समान नियंत्रक के साथ एनजी-टेबल का उपयोग कर रहा हूं, वही दृश्य लेकिन अलग-अलग यूआरएल के साथ डेटा लोड किया गया है, लेकिन कैश से डेटा प्राप्त करते समय यह कैश से डेटा पुनः लोड करता है, (जिसे मैं चाहता हूं स्पष्ट उपयोगकर्ता लॉग आउट जब)मैं विभिन्न स्रोतों के साथ व्यवस्थापक और उपयोगकर्ता दोनों के लिए एनजी-टेबल का उपयोग कर रहा हूं।

नियंत्रक

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(); 
    }); 

}]); 

सेवा

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; 

}]);

नोटif(service.cachedData.length>0) यह जगह एक ही डेटा दोनों पर लोड की तरह logins.Also, मैं डेटा का एक रूप को बचाने और एनजी-मेज पर सूची अपडेट नहीं होने पर पुन: निर्देशित हैं, क्योंकि यह नहीं कैश स्रोत से से डेटा लोड करता है।

+0

आप अपने डेटा स्रोत यूआरएल में पैरामीटर के रूप में उपयोगकर्ता लॉगिन क्यों नहीं जोड़ते हैं, 'getdata.php? Login = blabla' के रूप में? – skobaljic

+0

मैं अपना यूआरएल ऐसा नहीं करना चाहता हूं। अगर एनजी-टेबल है तो इन कैशों को साफ़ करने के लिए कुछ होना चाहिए और मैं सोच रहा हूं कि वह क्या है? – Abel

उत्तर

2

जब उपयोगकर्ता लॉग आउट करता है तो आपको स्पष्ट रूप से कैश्डडेटा सरणी साफ़ करनी चाहिए ताकि नए उपयोगकर्ता के पास कैश किए गए ऑब्जेक्ट्स की ताजा सरणी हो।

या कैशडेटाटा को मुख्य तरीके से स्टोर करें। जैसे

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

इस रूप में आप उपयोगकर्ता आईडी के आधार पर cachedData क्वेरी करने के लिए की आवश्यकता होगी कुछ जटिलताओं जोड़ देगा।

आप कोणीय कैश सेवा का उपयोग क्यों नहीं करते हैं जो यह स्वचालित रूप से काम करता है (यानी यह विभिन्न यूआरएल के लिए अलग कैश बनाता है)। https://github.com/jmdobry/angular-cache

संपादित करें: लॉग आउट पर कैश साफ़ करने के लिए; यदि आपके पास ऑथ नियंत्रक है (नियंत्रक जो लॉगिन को संभालता है और कार्रवाई को लॉग आउट करता है)। नाम नियंत्रक को उस नियंत्रक में इंजेक्ट करें लॉगआउट के क्लिक पर आप सरल लिख सकते हैं NameService.cachedData = []।

+0

उस कैश किए गए डेटा को कैसे साफ़ करें? – Abel

+0

@ हाबेल- यदि आपके पास ऑथ नियंत्रक है (नियंत्रक जो लॉगिन को संभालता है और कार्रवाई को लॉग आउट करता है)। नाम नियंत्रक को उस नियंत्रक में इंजेक्ट करें लॉगआउट के क्लिक पर आप सरल लिख सकते हैं NameService.cachedData = []। – Mahesh

+0

ठीक भाई, जैसा कि आपने कहा था कि मैं इसे लॉगआउट में साफ़ करता हूं। टिप्पणी के अनुसार कृपया अपना उत्तर संपादित करें। मैं उस पर बक्षीस जोड़ूंगा। (फिर भी मुझे इस बात पर रूचि है कि मैं कैश कैसे साफ़ कर सकता हूं? बस जानना चाहता हूं) – Abel

संबंधित मुद्दे

 संबंधित मुद्दे