angularJS学习笔记:页面缓存与页面刷新

遇到的问题

现在存在这样一个问题,登录前与登录成功后是同一个页面,只不过通过ngIf来控制哪部分显示,图像信息如下:

所以,整体工作不是很难,无非就是页面的布局,不过ionic提供了一套UI,可以很方便的布局到这个程度。

但是,当我布局好,接口也连接上以后,测试才发现有些地方有延迟,就像这样:

这个过程这样解释:

  • 点击“我的”进入个人中心
  • 我没有登录,展示的是未登录页面,点击登录
  • 进入登录页面,输入用户名密码并登录成功,返回主页面
  • 点击“我的”,显示的还是未登录页面!

所以现在问题出来了,在第四步的时候,应该进入的是个人页面,而非未登录状态。

html代码如下:


  1. <div class="my_buttons" ng-if="noLogin">
  2. <div class="row">
  3. <a ng-href="#/login">登录</a>
  4. <a ng-href="#/register">注册</a>
  5. </div>
  6. </div>
  7. <div class="my_photo" ng-if="!noLogin">
  8. <a ng-href="/#/my/{{user.id}}">
  9. <div class="login_logo">
  10. <img src="http://120.24.218.56/static/images/users/{{user.profilePhotoId}}" alt="">
  11. <p ng-bind="user.username"></p>
  12. </div>
  13. </a>
  14. </div>

先说一下最终的解决方法吧,解决方法就是在路由中,进入该页面时,禁止页面缓存。代码如下:


  1. //个人中心
  2. .state('my',{
  3. url:'/my',
  4. cache:'false',
  5. templateUrl:'templates/my.html',
  6. controller:'MyController'
  7. })

知识点解析:缓存

这个问题就是页面的缓存问题,通过查阅书籍可以找到一些解决方法。

一、什么是缓存

一个缓存就是一个组件,它可以透明的存储数据,以便未来可以更快地服务于请求。缓存不需要时常重新计算的数据是安全的,而重新获取数据会导致数据重复。

缓存能够服务的请求越多,整理系统性能就提升得越多。

二、angularJS中的缓存

angularJS提供的内置缓存服务是一个很方便的特性,它让我们能够使用同一机制来缓存自定义的内容。

$cacheFactry简介

$cacheFactory是一个为所有angular服务生成缓存对象的服务。在内部,$cacheFactory会创建一个默认的缓存对象,即使我们并没有显示地创建。

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


  1. var cache = $cacheFactory('myCache');

这里定义了一个ID为“myCache”的缓存。这个$cacheFactory方法可以接受两个参数:

1.cacheId(字符串):这个cacheId就是创建缓存时的ID名称,即上面的“myCache”。可以通过get()方法使用缓存名称来引用它。

2.options(对象):这个选项用于指定缓存如何表现。一般情况下,这个选项对象是一个键:capacity(数字),这个容量描述了在任何给定时间要使用缓存存储并保存的缓存键值对的最大数量。

$cacheFactory()方法返回一个缓存数组。

缓存对象

缓存对象自身有下列方法可以用来与缓存交互:

对象的使用方式如下(以info示例):


  1. cache.info()
  1. info():info()方法返回缓存对象的ID,尺寸和选项。
  2. put():put()方法允许我们把任意JavaScript对象值形式的键(字符串)放进缓存中。比如cache.put(“hello”,”world”)
  3. get():get()方法让我们能够访问一个键对应的缓存值。如果找到了这个键,它会返回它的值,如果没哟找到,它会返回undefined。cache.get(“hello”)
  4. remove():remove()函数用于在找到一个键值对的情况下从缓存中移除它。如果没有找到,返回undefined。
  5. removeAll():removeAll()函数用于重置缓存,同时移除所有已缓存的值。
  6. destory():destory()方法用于从$cacheFactory缓存注册表中移除指定缓存的所有引用。

三、$http缓存

angularJS的$http服务创建了一个带有ID为$http的缓存。要让$http请求使用默认的缓存对象很简单:$http方法允许我们给它传递一个cache参数。

也就是说,$http缓存默认是打开的。

当数据不会经常改变时,默认的$http缓存就特别有用了。可以像这样设置它:


  1. $http({
  2. method:"GET",
  3. url:'/api/user',
  4. cache:true
  5. })

或者使用辅助方法.get()


  1. $http.get('/api/user',{
  2. cache:true
  3. })

现在,通过$http到URL /api/user的每个请求将会存储到默认的$http缓存中。这个$http缓存中的请求键就是完整的URL路径。

 
通过在$http选项中传入参数true,可以告诉$http服务使用默认的缓存。如果我们不想经常干扰那些缓存,使用默认缓存时很有用的。

angular页面缓存与页面刷新的更多相关文章

  1. 用angular怎么缓存父页面数据

    angular做单页面应用是一个比较好的框架,但是它有一定的入门难度,对于新手来说可能会碰到很多坑,也有许多难题,大部分仔细看文档,找社区是能解决的. 但有些问题也许资料比较少,最近遇到过一个要缓存父 ...

  2. Nginx特性验证-反向代理/负载均衡/页面缓存/URL重定向

    原文发表于cu:2016-08-25 参考文档: Nginx 反向代理.负载均衡.页面缓存.URL重写等:http://freeloda.blog.51cto.com/2033581/1288553 ...

  3. 探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  4. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  5. cache-contro页面缓存处理设置

    <meta http-equiv="pragma" content="no-cache">,pragma与no-cache用于定义页面缓存,不缓存页 ...

  6. [转]MVC3缓存之一:使用页面缓存

    本文转自:http://www.cnblogs.com/parry/archive/2011/03/19/OutputCache_In_MVC3.html 在以前的WebForm的开发中,在页面的头部 ...

  7. Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  8. MVC3缓存之一:使用页面缓存

    MVC3缓存之一:使用页面缓存 在MVC3中要如果要启用页面缓存,在页面对应的Action前面加上一个OutputCache属性即可. 我们建一个Demo来测试一下,在此Demo中,在View的Hom ...

  9. 更新页面缓存OutputCache

    为什么要使用OutputCache 我认为OutputCache是最简单的缓存技术了,它针对的是页面级别的,简单的一条指令就可以达到缓存的效果,有效的减轻服务器的压力和减少带宽,对于网站一些不会频繁更 ...

随机推荐

  1. python 之分发包

    setuptools python包的根目录设置setup.py from setuptools import setup, find_packages setup( name = 'm' versi ...

  2. C#.Net面试题

    点这里,有很多篇<C#..Net经典面试题02> 在线阅读本文:http://3y.uu456.com/bp_5dcve363vi7px008u2lt_1.html C#..Net经典面试 ...

  3. 转载linux c语言程序的Makefile编写

    对于程序设计员来说,makefile是我们绕不过去的一个坎.可能对于习惯Visual C++的用户来说,是否会编写makefile无所谓.毕竟工具本身已经帮我们做好了全部的编译流程.但是在Linux上 ...

  4. 老李推荐:第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本

    老李推荐:第8章5节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行测试脚本   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化 ...

  5. Java并发编程:线程的基本状态

    一.线程的基本状态 线程基本上有5种状态,分别是:NEW.Runnable.Running.Blocked.Dead. 1)新建状态(New) 当线程对象对创建后,即进入了新建状态,如:Thread ...

  6. linux sort命令详解(转)

    sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式: sort [-bcfMnrtk][源文件][-o 输出文件] 补充说明:sort可针对文本文件的内容,以行为单位来排序. 参 数 ...

  7. alert 和 console.log的区别

    出走半月,一直以为 console.log 和 alert 的用法是一样的,只是表现的形式不同,alert 是以弹框的形式出现,console.log 是在后台打印输出. 但是今天在写东西的时候,发现 ...

  8. 利刃 MVVMLight 5:绑定在表单验证上的应用

    表单验证是MVVM体系中的重要一块.而绑定除了推动 Model-View-ViewModel (MVVM) 模式松散耦合 逻辑.数据 和 UI定义 的关系之外,还为业务数据验证方案提供强大而灵活的支持 ...

  9. 脚本语言:Xmas(二)

    本篇,来谈谈类型系统,以及部分与垃圾收集器相关的内容. 一.基本类型 Xmas的基本类型:Null.Boolean.Label.String.Ref.Function.Integer.Float.De ...

  10. iOS开发 socket, 全局socket

    因为项目的要求是全局的socket,  哪里都有可能使用到socket去发消息, 所以我把socket写在了单利里面 项目用的是 pod 'CocoaAsyncSocket'  三方库, 是异步的, ...