加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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 = [].

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读