不准模板缓存,Angularjs中的缓存以及缓存清理

写在最前边:那篇博文是二篇小说组成,详细介绍了Angularjs中的缓存以及缓存清理,文章由北京尚学堂转发过来,欢迎大家阅读和评论。转发请评释出处,感谢!

Angularjs中的缓存以及缓存清理,angularjs缓存清理

写在最前头:那篇博文是2篇文章组成,详细介绍了Angularjs中的缓存以及缓存清理,小说由新加坡尚学堂转发过来,欢迎咱们阅读和评价。转发请表明出处,多谢!

 

 

二个缓存正是三个零件,它能够透明地蕴藏数据,以便今后能够越来越快地服务于请求。多次重复地收获能源大概会促成数据再次,消耗费时间间。由此缓存适用于变化性相当的小的局地数目,缓存能够服务的请求越来越多,整系列统性子就能升级愈来愈多。
 

因为AngularJS的表征(or
浏览器自身的缓存?),angular私下认可的HTML模板加载都会被缓存起来。导致每一趟修改完模板之后都得不时索要排除浏览器的缓存来确定保证浏览器去赢得新型的html模板,本身测试辛亏,但借使更新了服务器的模版内容,用户可不会每一种都十分你去排除浏览器的缓存。故那还真是个大标题。

转自:

 

 1、 $cacheFactory 简介 

  

$cacheFactory 是叁个为持有Angular服务转移缓存对象的劳动。在里头,
$cacheFactory 会成立2个默许的缓存对象,固然大家并从未显得地开创。

要开创一个缓存对象,可以动用 $cacheFactory 通过一个ID创建四个缓存:

var cache = $cacheFactory('myCache');

其1 $cacheFactory 方法能够承受多个参数:

cacheId (字符串):那一个 cacheId 正是创办缓存时的ID名称。能够经过 get()
方法应用缓存名称来引用它。

不准模板缓存,Angularjs中的缓存以及缓存清理。capacity
:那个体积描述了在此外给定时期要动用缓存存款和储蓄并保存的缓存键值对的最大数据。

 

[javascript] view
plain copy

$http

 

二、 缓存对象

缓存对象自小编有下列这个格局能够用来与缓存交互。

info() : info() 方法重回缓存对象的ID、尺寸和挑选。

put() : put()
方法允许大家把任意JavaScript对象值格局的键(字符串)放进缓存中。cache.put(“hello”,”world”);

put() 方法会重临大家放入缓存中的值。

get() : get()
方法让大家能够访问1个键应和的缓存值。就算找到了那一个键,它会回去它的值;假诺未有找到,它会回到
undefined 。cache.get(“hello”);

remove() : remove()
函数用于在找到1个键值对的动静下从缓存中移除它。假如未有找到,它就会回来
undefined 。cache.remove(“hello”);

removeAll() : removeAll() 函数用于复位缓存,同时移除全部已缓存的值。

destory() : destory() 方法用于从 $cacheFactory
缓存注册表中移除钦定缓存的全体引用。

 

 澳门葡京 1澳门葡京 2

$http服务是依照$q服务的,提供了promise封装,它接受三个计划对象参数,并重返二个promise对象。同时,它还提供了二个主意用来定义Promise回调:success
和 error。

三个缓存正是2个组件,它能够透明地囤积数据,以便现在能够越来越快地服务于请求。多次重复地赚取财富可能会促成数据再度,消耗费时间间。因而缓存适用于变化性非常的小的片段数码,缓存可以服务的乞求越来越多,整种类统品质就能进级更加多。
 

三、$http中的缓存

  $http()方法允许我们传递贰个cache参数。当数码不会时不时转移的时候,默许的$http缓存会尤其有用。在那之中,暗中同意的$http缓存对象是 var cache =
$cacheFactory(‘$http’); 能够这么设置它

 

$http({
     method: 'GET',
     url: 'api/user.json',
     cache: true
})

  在那之中,缓存的键值为url, var userCache =
cache.get(‘api/user.json’) 

  1. app.config(function($routeProvider, $locationProvider) {  
  2.   $routeProvider  
  3.    .when(‘/Book/:bookId/ch/’, {  
  4.     templateUrl: ‘chapter.html’,  
  5.     controller: ‘ChapterController’  
  6.   });  
  7. });  

 

 1、 $cacheFactory 简介 

  

$cacheFactory 是2个为持有Angular服务转移缓存对象的劳动。在中间,
$cacheFactory 会成立贰个暗许的缓存对象,即便我们并不曾显得地创建。

要创立三个缓存对象,能够运用 $cacheFactory 通过三个ID创制二个缓存:

var cache = $cacheFactory('myCache');

本条 $cacheFactory 方法能够承受五个参数:

cacheId (字符串):这几个 cacheId 便是创造缓存时的ID名称。能够由此 get()
方法应用缓存名称来引用它。

capacity
:这些容积描述了在其余给定时间要选择缓存存储并保留的缓存键值对的最大数目。

 

4、自定义缓存

  通过自定义的缓存来让$http发起呼吁也很简单,只需把cache值设为对应缓存对象名称就可以

 

$http({
     method: 'GET',
     url: 'api/user.json',
     cache: myCache
})

 

  只怕经过config配置来设置各类$http请求的缓存对象,而无需像上面包车型客车例证中,往每两个$http请求中参加配置

app.config(function($httpProvider){
    $httpProvider.defaults.cache = $cacheFactory('myCache',{capacity: 20})

 

  当中,capacity会使用”近期缓存最久未选取算法”,正是说,加如缓存容积为20,未来曾经缓存了缓存二十一个,当第1二个想要被缓存的时候,最久最小未被选拔的缓存键值对会被免除,以便腾出空间容纳第三一个缓存。

先讲到这里,接下去再看看《【东京前端培养和陶冶】Angularjs中的缓存清理》,

壹、清除模板缓存

 

[javascript] view plain copy  

  1. .run(function($rootScope, $templateCache) {    
  2.             $rootScope.$on(‘$routeChangeStart’, function(event, next, current) {    
  3.                 if (typeof(current) !== ‘undefined’){    
  4.                     $templateCache.remove(current.templateUrl);    
  5.                 }    
  6.             });    
  7.         });   
  8. 北京前端培养和磨炼  shsxt.com/html伍

2、html增加随机参数

 

[javascript] view plain copy  

  1. .state(“content”, {  
  2.                url: “/”,  
  3.                views:{  
  4.                    “bodyInfo”:{templateUrl: ‘tpls/bodyInfo.html?’+ +new Date(),  
  5.                        controller:’bodyInfoCtrl’},  
  6.                    “header”:{templateUrl: ‘tpls/header.html?’+ +new Date(),  
  7.                        controller:’headerCtrl’  
  8.                    },  
  9.                    “footer”:{templateUrl: ‘tpls/footer.html?’+ +new Date(),  
  10.                        controller:’footerCtrl’  
  11.                    }  
  12.                }  
  13.             })  

[html] view plain copy  

  1. <link rel=”stylesheet” href=”stylesheets/main.css?version=1.0.3″>  

三、清除route缓存

 

[javascript] view plain copy  

  1. .config([‘$stateProvider’, ‘$urlRouterProvider’,’$locationProvider’,’$httpProvider’,function($stateProvider, $urlRouterProvider,$locationProvider,$httpProvider) {  
  2. //         $urlRouterProvider.when(“”, “/home”);  
  3.             $urlRouterProvider.otherwise(‘/’);  
  4.              if (!$httpProvider.defaults.headers.get) {  
  5.               $httpProvider.defaults.headers.get = {};  
  6.             }  
  7.             $httpProvider.defaults.headers.common[“X-Requested-With”] = ‘XMLHttpRequest’;  
  8.             $httpProvider.defaults.headers.get[‘Cache-Control’] = ‘no-cache’;  
  9.             $httpProvider.defaults.headers.get[‘Pragma’] = ‘no-cache’;  
  10. 北京前端培训  shsxt.com/html五

对此Angularjs中的缓存介绍,推荐阅读《【新加坡前端培养和演习】Angularjs中的缓存》;如需越来越多前端技巧作品,请点击
北京前端培养和练习

写在最前面:那篇博文是二篇小说组成,详细介绍了Angularjs中的缓存以及缓存清理,文章由…

主意1:在模板文件路线后加时间戳(or
别的随机数),强制AngularJs每趟从服务器加载新的沙盘

[javascript] view
plaincopy澳门葡京 3澳门葡京 4

二、 缓存对象

缓存对象自笔者有下列那个点子能够用来与缓存交互。

info() : info() 方法再次来到缓存对象的ID、尺寸和选用。

put() : put()
方法允许我们把任意JavaScript对象值方式的键(字符串)放进缓存中。cache.put(“hello”,”world”);

put() 方法会重回大家放入缓存中的值。

get() : get()
方法让我们能够访问3个键一拍即合的缓存值。即便找到了这几个键,它会回来它的值;纵然未有找到,它会回去
undefined 。cache.get(“hello”);

remove() : remove()
函数用于在找到一个键值对的图景下从缓存中移除它。倘使未有找到,它就会再次来到undefined 。cache.remove(“hello”);

removeAll() : removeAll() 函数用于重新恢复设置缓存,同时移除全数已缓存的值。

destory() : destory() 方法用于从 $cacheFactory
缓存注册表中移除内定缓存的保有引用。

 

[javascript] view
plain copy

 

三、$http中的缓存

  $http()方法允许大家传递3个cache参数。当数码不会平常改换的时候,暗中认可的$http缓存会特别有用。其中,暗许的$http缓存对象是 var cache =
$cacheFactory(‘$http’); 可以这么设置它

 

$http({
     method: 'GET',
     url: 'api/user.json',
     cache: true
})

  在那之中,缓存的键值为url, var userCache =
cache.get(‘api/user.json’) 

 澳门葡京 5澳门葡京 6

  1. $http({method:”GET”, url:”/someUrl”}).  
  2.     success(function(data, status, headers, config){  
  3.         //当异步请求成功重回响应时触发  
  4.     }).error(function(data, status, headers, config){  
  5.         //当产生特别时触发  
  6.     });  

四、自定义缓存

  通过自定义的缓存来让$http发起呼吁也很简短,只需把cache值设为对应缓存对象名称就能够

 

$http({
     method: 'GET',
     url: 'api/user.json',
     cache: myCache
})

 

  或然经过config配置来设置每个$http请求的缓存对象,而毋庸像上边的事例中,往每2个$http请求中投入配置

app.config(function($httpProvider){
    $httpProvider.defaults.cache = $cacheFactory('myCache',{capacity: 20})

 

  当中,capacity会利用”近日缓存最久未使用算法”,便是说,加如缓存体量为20,现在早已缓存了缓存二十个,当第一二个想要被缓存的时候,最久最小未被选拔的缓存键值对会被免去,以便腾出空间容纳第一二个缓存。

先讲到那里,接下去再看看《【Hong Kong前端培养和演练】Angularjs中的缓存清理》,

一、清除模板缓存

 

[javascript] view
plain copy

 

  1. .run(function($rootScope, $templateCache) {    
  2.             $rootScope.$on(‘$routeChangeStart’, function(event, next, current) {    
  3.                 if (typeof(current) !== ‘undefined’){    
  4.                     $templateCache.remove(current.templateUrl);    
  5.                 }    
  6.             });    
  7.         });   
  8. 东京前端培养和锻炼  shsxt.com/html伍

二、html增添随机参数

 

[javascript] view
plain copy

 

  1. .state(“content”, {  
  2.                url: “/”,  
  3.                views:{  
  4.                    “bodyInfo”:{templateUrl: ‘tpls/bodyInfo.html?’+ +new Date(),  
  5.                        controller:’bodyInfoCtrl’},  
  6.                    “header”:{templateUrl: ‘tpls/header.html?’+ +new Date(),  
  7.                        controller:’headerCtrl’  
  8.                    },  
  9.                    “footer”:{templateUrl: ‘tpls/footer.html?’+ +new Date(),  
  10.                        controller:’footerCtrl’  
  11.                    }  
  12.                }  
  13.             })  

[html] view
plain copy

 

  1. <link rel=”stylesheet” href=”stylesheets/main.css?version=1.0.3″>  

三、清除route缓存

 

[javascript] view
plain copy

 

  1. .config([‘$stateProvider’, ‘$urlRouterProvider’,’$locationProvider’,’$httpProvider’,function($stateProvider, $urlRouterProvider,$locationProvider,$httpProvider) {  
  2. //         $urlRouterProvider.when(“”, “/home”);  
  3.             $urlRouterProvider.otherwise(‘/’);  
  4.              if (!$httpProvider.defaults.headers.get) {  
  5.               $httpProvider.defaults.headers.get = {};  
  6.             }  
  7.             $httpProvider.defaults.headers.common[“X-Requested-With”] = ‘XMLHttpRequest’;  
  8.             $httpProvider.defaults.headers.get[‘Cache-Control’] = ‘no-cache’;  
  9.             $httpProvider.defaults.headers.get[‘Pragma’] = ‘no-cache’;  
  10. 北京前端培训  shsxt.com/html5

对此Angularjs中的缓存介绍,推荐阅读《【新加坡前端培养和磨炼】Angularjs中的缓存》;如需越多前端技艺文章,请点击
新加坡前端培训

  1.  <pre name=”code” class=”javascript”>app.config(function($routeProvider, $locationProvider) {  
  2.   $routeProvider  
  3.    .when(‘/Book/:bookId/ch/’, {  
  4.     templateUrl: ‘chapter.html’ + ‘?datestamp=’ + (new Date()).getTime(),  
  5.     controller: ‘ChapterController’  
  6.   });  
  7. });  

 

可是那种格局太欠赏心悦目了。。。。

 

方法二:使用$templateCache清除缓存

出于常用的http请求就那么两种,$http服务实现了对应的省心方法,比方说:
$http.get
$http.post
$http.put
$http.delete
$http.head
$http.jsonp

[javascript] view
plain copy

$http为每便请求自动增加了HTTP
header,可因而$httpProvider.defaults.headers来安插相关内容。

 澳门葡京 7澳门葡京 8

$httpProvider.defaults.headers.common设置了全体请求都会含有的头消息:

  1. // 禁止模板缓存  
  2. app.run(function($rootScope, $templateCache) {  
  3.     $rootScope.$on(‘$routeChangeStart’, function(event, next, current) {  
  4.         if (typeof(current) !== ‘undefined’){  
  5.             $templateCache.remove(current.templateUrl);  
  6.         }  
  7.     });  
  8. });  

Accept: application/json, text/plain, * / *
x-Requested-With: XMLHttpRequest

在部署路由地方后,即在app.config之后增多那段代码,可禁止AngularJs将templateUrl缓存起来。

$httpProvider.defaults.headers.post设置了POST请求的私下认可请求头:

Content-Type: application/json

$httpProvider.defaults.headers.put设置了PUT请求的私下认可请求头:

Content-Type: application/json

此外,关于$http的cache特征,推荐看一下那篇文章。

那么$http的相关内容,就先到此截至。

 

当今,我们起头看看$resource,供给小心的是,该服务须要大家手动加载angular-resource.js文件~
$resource服务的为主价值在于:提要求开采者与RESTful风格WebServices交互的越来越好的用户体验,它包裹了相比低等的$http,那样就不供给前端开采者写大量的异步请求代码了。

$resource服务的安顿格局:

 

[javascript] view
plaincopy澳门葡京 9澳门葡京 10

 

  1. $resource(url[, paramDefaults][, actions]);  

url

 

字符串类型,其中能够出现占位符,占位符要以“:”为前缀,固然系统的域名带端口号的话,要求手动转义:
应当那样传入:

 

[javascript] 澳门葡京 ,view
plaincopy澳门葡京 11澳门葡京 12

 

  1. $resource(“”);  

那种情况在ng的1.二.0rc壹版本早已不设有了,端口号会被辨认而不须要手工业转义~~

 

paramDefaults(可选)

对象类型,用于安装参数的暗中同意值,它设置的数值可以被actions(首个参数)举办覆盖。就算设置的参数值是函数,那么该函数将要历次获得其值时被实施(有那么点废话的意味)。

对此设置的尚未出现在url模板(第叁个参数)中的参数,将会以search
query的主意丰裕,例如:
若果url模板为/codingcool/:author,paramDefaults为{author:”kazaff”,
profession:”geek”},那么最后的请求url会产生:
/codingcool/kazaff?profession=geek

设若参数值是以“@”先河的,那么其真实值将会从数额对象中提取,前面会有例子。

actions(可选)

对象类型,用来定义$resource提供的能够行使方式,注脚细节和$http一样。

上面再来看一下$resource的再次回到值:
重临值的门类是目的,它包涵了和钦定服务api(即url)进行相互的具有办法,默许会包罗如下暗中同意方法:

 

[javascript] view
plaincopy澳门葡京 13澳门葡京 14

 

  1. { ‘get’:    {method:’GET’},  
  2.   ‘save’:   {method:’POST’},  
  3.   ‘query’:  {method:’GET’, isArray:true},  
  4.   ‘remove’: {method:’DELETE’},  
  5.   ‘delete’: {method:’DELETE’}  
  6. };  

 

这个方法会调用内置的$http服务~

当异步请求成功,数据从服务器端取回后,被包裹到一个$resource服务的一个指标实例中,这几个指标足以被save,remove,delete方法直接操作,那种封装并提供轻松的CRUD操作的点子,使得开采者能够感受到被珍重啊!呵呵~

[javascript] view
plaincopy澳门葡京 15澳门葡京 16

 

  1. var User = $resource(‘/user/:userId’, {userId:’@id’});  
  2. var user = User.get({userId:123}, function() {  
  3.   user.abc = true;  
  4.   user.$save();  
  5. });  

小心上边代码中的”@id”和”$save()”,使用了@后,当实践$save时,user.id就会被看做userId的值来发送请求。

那种艺术封装Ajax,不仅仅使得代码更高雅,而且仍可以合营ng的视图渲染:当数码尚未重临在此之前,模板引擎不会渲染,一旦异步数据获得成功,会活动触发模板引擎的渲染机制把数据显现到视图中。

终极,看2个粗略的例证:

AngularJS的$resource

[html] view
plaincopy澳门葡京 17澳门葡京 18

 

  1. <!DOCTYPE html>  
  2. <html ng-app=”Demo”>  
  3. <head>  
  4. <meta charset=utf-8 />  
  5. <title>ngResource DEMO</title>  
  6. </head>  
  7. <body>  
  8.     <div ng-controller=”GeekListCtrl”>  
  9.         <ul>  
  10.             <li ng-repeat=”geek in geeks”>  
  11.                 <a href=”#” ng-click=”show({{geek.id}})”>{{geek.name}}</a>  
  12.             </li>  
  13.         </ul>  
  14.         <div ng-show=”user”>  
  15.             {{user.msg}}  
  16.         </div>  
  17.     </div>  
  18.      
  19.     <script src=”./src/angular.js”></script>  
  20.     <script src=”./src/angular-resource.js”></script>  
  21.     <script type=”text/javascript”>  
  22.         var Demo = angular.module(‘Demo’, [“ngResource”])  
  23.                     .factory(‘Geek’, function ($resource){  
  24.                         return $resource(“geek/:geekId.json”, {}, {  
  25.                             query: {  
  26.                                 method: “GET”,  
  27.                                 params: {geekId: “list”},  
  28.                                 isArray: true  
  29.                             }  
  30.                         });  
  31.                     });  
  32.   
  33.         function GeekListCtrl($scope, Geek){  
  34.             $scope.geeks = Geek.query();  
  35.             $scope.show = function(id){  
  36.                 $scope.user = Geek.get({geekId: id});  
  37.             };  
  38.         }  
  39.   
  40.         function GeekDetailCtrl($scope, $routeParams, Geek){  
  41.             $scope.geek = Geek.get({geekId: $routeParams.geekId}, function(geek){  
  42.                 console.dir(geek);  
  43.             });  
  44.         }  
  45.     </script>  
  46. </body>  
  47. </html>  

转自:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website