vue单页缓存组件

实现前进刷新,返回不刷新的功能,并且返回时可以记住上一页的滚动位置,有两套方案可选

第一套方案:vue的keep-alive组件,vue-router提供的scrollbeheavior API

keep-alive:可以实现把要缓存的组件渲染的vnode记到cache里边,当返回的时候用缓存里边的dom直接渲染,但是存在的问题是存储vnode节点的key是name,也就是定义路由时组件对应的name,这就会导致同样的path,不同参数的时候打开的是从cache里边拿到的vnode,很多业务场景都是根据参数来显示不同内容,而keep-alive底层并没有对此做扩展,可以看下keep-alive源码:https://github.com/vuejs/vue/blob/dev/src/core/components/keep-alive.js,

 vnode.key就是路由里边定义的name,关于vnode的源码里可以看
const key: ?string = vnode.key == null
        // same constructor may get registered as different local components
        // so cid alone is not enough (#3269)
        ? componentOptions.Ctor.cid + (componentOptions.tag ? `::${componentOptions.tag}` : ‘‘)
        : vnode.key
      if (cache[key]) {
        vnode.componentInstance = cache[key].componentInstance
        // make current key freshest
        remove(keys, key)
        keys.push(key)
      } else {
        cache[key] = vnode
        keys.push(key)
        // prune oldest entry
        if (this.max && keys.length > parseInt(this.max)) {
          pruneCacheEntry(cache, keys[0], keys, this._vnode)
        }
      }

原文地址:https://www.cnblogs.com/afterwawa/p/9645996.html

时间: 2024-08-02 05:39:14

vue单页缓存组件的相关文章

解决vue单页路由跳转后scrollTop的问题

作为vue的初级使用者,在开发过程中遇到的坑太多了.在看页面的时候发现了页面滚动的问题,当一个页面滚动了,点击页面上的路由调到下一个页面时,跳转后的页面也是滚动的,滚动条并不是在页面的顶部 在我们写路由的时候做个处理,如下: import Vue from 'vue' import Router from 'vue-router' Vue.use(Router); Vue.use(Router) export default new Router({ routes: [ { path: '/',

Vue 基于node npm & vue-cli & element UI创建vue单页应用

基于node npm & vue-cli & element UI创建vue单页应用 开发环境   Win 10   node-v10.15.3-x64.msi 下载地址: https://nodejs.org/en/ 安装node 安装vue-cli 1.安装node-v10.15.3-x64.msi 2.设置注册地址 因为npm官方仓库在国外,有时候下载速度会非常慢,不过有淘宝镜像可以使用,下载包的速度很快.而且淘宝镜像是定时更新同步npm的官方仓库的. npm config set

vue单页应用前进刷新后退不刷新方案探讨

引言 前端webapp应用为了追求类似于native模式的细致体验,总是在不断的在向native的体验靠拢:比如本文即将要说到的功能,native由于是多页应用,新页面可以启用一个的新的webview来打开,后退其实是关闭当前webview,其上一个webview就自然显示出来:但是在单页的webapp应用中,所有内容其实是在一个页面中展示的,不存在多页的情况,这时就需要前端开发来想办法实现相应的体验效果. 首先需要说明一下,本文所说的前进刷新后退不刷新是指组件是否重新渲染,比如列表A页面,点击

Vue单页式应用(Hash模式下)实现微信分享

前端微信分享的基本步骤: 一.绑定域名: 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名".这个不多说,微信开发的都应该清楚. 二.引入js文件: 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js.请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixi

vue单页(spa)前端git工程拆分实践

背景 随着项目的成长,单页spa逐渐包含了许多业务线 商城系统 售后系统 会员系统 ... 当项目页面超过一定数量(150+)之后,会产生一系列的问题 可扩展性 项目编译的时间(启动server,修改代码)越来越长,而每次调试关注的可能只是其中1.2个页面 需求冲突 所有的需求都定位到当前git,需求过多导致测试环境经常排队 基于以上问题有了对git进行拆分的技术需求.具体如下 目标 依然是spa 由于改善的是开发环境,当然不希望拆分项目影响用户体验.如果完全将业务线拆分成2个独立页面,那么用户

hbuilder+vue单页应用打包成APP后退按钮返回上一页的问题

APP打包工具:hbuilder 需要js包:mui.js ,引入方法https://www.cnblogs.com/v616/p/11290281.html 实现原理:在vue根组件App.vue监听安卓机,按后退键时候vue的路由path 代码App.vue 代码片段: data() { return { tabbarShow:true, arrTab:['/home','/cat','/history','/me'] }; }, mounted(){ // 安卓后退键 this.$mui.

APICloud打包Vue单页应用

APICloud新建项目后,会生成以下目录结构 其中index.html是入口文件,而vue-cli打包生成的文件是在dist目录下 ├─dist│ └─static│ ├─css│ └─js │ └─index.html 把dist目录中的static文件夹和index.html复制到apicloud的项目文件中即可,覆盖原来的index.html.最终apicloud的目录结构只是比原来多了一个static目录. vue项目中需要做如下配置,config/index.js中需要把build的

教你在微信中给Vue单页应用设置标题

前言 由于Vue React Angular等框架出来的应用都是SPA(single-page-application),所以就没有所谓的页面 都是router 而网页的标题 随着路由的改变而改变 也就成了一个(伪)需求 问题 在iOS的微信中 一个SPA应用 想要改变微信顶部导航栏的标题 使用document.title = xxx来改变网页标题是无效的 原因大致就是因为在微信中webview只加载网页标题一次 动态改变是无效的 除非都以新页面打开(那SPA的用户体验有什么卵用吗) 解决方案

vue 单页应用点击某个链接,跳转到新页面的方式

<router-link class="goDetail" :to="{name: 'detail',params: {id:item.id}}" target = _blank>查看详情</router-link> 原文地址:https://www.cnblogs.com/whowhere/p/10029471.html