angularjs – 我正在为不同来源的管理员和用户使用ng-table.作者
发布时间:2020-12-17 07:01:31 所属栏目:安全 来源:网络整理
导读:我使用ng-table为admin和用户使用相同的控制器,相同的视图但是加载了不同URL的数据,但是从缓存中获取数据时它会从缓存中重新加载数据(我想在用户注销时清除) 调节器 myApp.controller('listArticle',['$scope','$filter','ngTableParams','nameService','$ro
我使用ng-table为admin和用户使用相同的控制器,相同的视图但是加载了不同URL的数据,但是从缓存中获取数据时它会从缓存中重新加载数据(我想在用户注销时清除)
调节器 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',function($http,$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,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,params); $defer.resolve(transformedData); }); } } }; return service; }]); 请注意if(service.cachedData.length> 0)这个地方在两个logins上加载相同的数据.也就是说,如果我保存一个数据形式并重定向到ng-table,则列表不会更新,因为它从缓存加载数据而不是从资源. 解决方法
用户注销时应明确清除cachedData数组,以便新用户拥有新的缓存对象数组.
或者以key方式存储cachedData.例如 cachedData=[{"user" : '123','data':[{}]},"user" : '234','data':[{}] ] 这将增加一些复杂性,因为您需要根据用户ID查询cachedData. 为什么不使用角度缓存服务,它自动工作(即它为不同的URL创建单独的缓存). https://github.com/jmdobry/angular-cache 编辑:在注销时清除缓存;如果您有一个auth控制器(处理登录和注销操作的控制器).将nameService注入该控制器单击注销,您可以简单地编写nameService.cachedData = []. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Angular2,预编译功能模块时的元数据错误
- AngularJs ng-options
- Kubernetes - - k8s - v1.12.3 Helm持久化部署 Redmine 集成
- CVE-2019-12735 VIM命令执行漏洞利用
- 为什么Scala中没有“Functor”特征?
- shell脚本中${variable_name}和$variable_name之间的区别是
- axis webservice 笔记 安装eclipse axis2 插件 (links 方式
- php – 错误1错误:安装sqlsrv时`make’失败
- angularjs – Angular docs:如何在控制器之间共享无状态/有
- bootstrap-datetimepicker的功能优化