vue 组件来回切换时 记住上一个组件滚动位置(keep-alive)
记住组件滚动状态:
使用场景:从某列表组件进入详情页,在返回的时候需要保留列表组件状态,包括滚动的高度。这个时候需要keep-alive配合。
方法一:如下情况导航在做普遍用法。前提是使用keep-alive

keep-alive提供了两个钩子函数:
1. acvitaved: keep-alive 组件激活时调用。
export default {
  name: "docMng", //为了保存这个路由状态
  data() {
    return {
      offsetTop: "" //获取滚动位置,下次进来的时候,设置滚动高度为这个值
    };
  },
  activated() {
  // keep-alive组件 页面进入的时候设置滚动高度
    document.getElementById("mainContent").scrollTop = this.offsetTop;
  },
  deactivated() {
    //keep-alive 组件停用时调用(简单理解为组件离开的时候)。
    // 获取页面滚动高度,这个钩子有可能会拿不到数据,因为这个钩子执行的慢,可以用beforeRouteLeave代替
   this.offsetTop = document.getElementById("mainContent").scrollTop;
  }, 
 // beforeRouteLeave(to, from, next) {
  // // 组件离开的时候,获取页面滚动高度 
  // // this.offsetTop = document.getElementById('mainContent').scrollTop;
  // next() 
 // }, 
};
方法二:项目全局页面滚动的情况,导航菜单在顶部的时候可以用此方法。(不必keep-alive也可以)
配合vue-router的scrollBehavior。直接在scrollBehavior里面设置滚动到某一位置是设置不上的,只能异步再加个定时。
savePosition输出的是{x:0,y:0}滚动的距离。

总结:
方法一 优点:由于keep-alive,所以到指定滚动高度的时候是无感知的。 缺点:需要对每个想要此功能的组件写相应代码。
方法二 优点:全局控制代码量少。 缺点:需要加定时才能,延时返回指定高度,显得突兀不流畅。
两种方法的采用完全看自己项目的设计排版,所以某一方法有时候是可以通用的。
vue 组件来回切换时 记住上一个组件滚动位置(keep-alive)的更多相关文章
- 关于含RecyclerView的fragment来回切换时页面自动滑动到底部的解决方法
		原因: 在fragment中来回切换时RecyclerView获得了焦点,而RecyclerView的 focusableOnTouchMode属性默认是true,所以在切换时RecyclerView ... 
- ios 仿新浪微博 UINavigationController 向左滑动时显示上一个控制器的View.
		仿新浪微博 UINavigationController 向左滑动时显示上一个控制器的View. 实现原理,UINavigationController 的 self.view显示时把当前显示的vie ... 
- vue -vantUI tab切换时 list组件不触发load事件解决办法
		最近由于公司项目需要,用vue写了几个简单的页面.用到了vantUI List 列表 瀑布流滚动加载,用于控制长列表的展示 当列表即将滚动到底部时,会触发事件并加载更多列表项. (页面加载完成后默认会 ... 
- vue 使用同一组件,切换时不触发created、mounted钩子
		两个页面参数不同使用同一组件,默认情况下当这两个页面切换时并不会触发created或者mounted钩子. 方法一:通过watch $route的变化来做处理 watch: { $route() { ... 
- vue2 切换路由时 页面滚动到顶部 用游览器返回时 记住上页的位置
		官方用例:https://router.vuejs.org/zh-cn/advanced/scroll-behavior.html import Vue from 'vue' import Route ... 
- Vue 折叠面板Collapse在标题上添加组件后,阻止面板冒泡的用法
		iView组件中,折叠面板Collapse点击面板标题部分,会出现面板收起或展开的效果.那么在面板标题后面再添加下拉框之类的组件时,会出现跟面板点击一样的效果,这时候就需要阻止冒泡的用法了.具体代码: ... 
- vue axios请求频繁时取消上一次请求
		一.前言 在项目中经常有一些场景会连续发送多个请求,而异步会导致最后得到的结果不是我们想要的,并且对性能也有非常大的影响.例如一个搜索框,每输入一个字符都要发送一次请求,但输入过快的时候其实前面的请求 ... 
- jquery怎么在点击li标签之后添加一个在class,点击下一个li时删除上一个class?
		思路:点击当前li元素后是用removeClass()删除所有兄弟元素(使用siblings()获取)的class样式,然后使用addClass()为当前li添加class. 具体演示如下: 1.HT ... 
- jquery点击li标签之后在该li标签上添加一个class,点击下一个li时删除上一个li的class
		思路:点击当前li元素后是用removeClass()删除所有兄弟元素(使用siblings()获取)的class样式,然后使用addClass()为当前li添加class 具体演示如下: 1.HTM ... 
随机推荐
- 从Oracle转到Mysql前需了解的50件事
			我本人比较关心的几点: 1. 对子查询的优化表现不佳. 2. 对复杂查询的处理较弱 4. 性能优化工具与度量信息不足 12. 支持 SMP (对称多处理器),但是如果每个处理器超过 4 或 8 个核( ... 
- 2017-3-5 leetcode 442 531 533
			今天莫名其妙睡到了中午,很难受... leetcode442 https://leetcode.com/problems/find-all-duplicates-in-an-array/?tab=De ... 
- [jzoj 6101] [GDOI2019模拟2019.4.2] Path 解题报告 (期望)
			题目链接: https://jzoj.net/senior/#main/show/6101 题目: 题解: 设$f_i$表示从节点$i$到节点$n$的期望时间,$f_n=0$ 最优策略就是如果从$i, ... 
- [转]Linux常用命令学习
			转自 https://www.cnblogs.com/gaojun/p/3359355.html 1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文 ... 
- 使用BigDecimal完成小数点后的精确位数的四舍五入
			package com.ryan; import java.math.BigDecimal; class MyMath { public static double round(double num ... 
- 更博不能忘——webpack学习笔记
			webpack是前端构建系统就像grunt和gulp(之前有学习过grunt所以也就大概明白webpack是个什么东西),所以说前端技术大部分还真是相通的,现在觉得当时多看的东西并不白费,虽然长时间不 ... 
- 边框的使用,border-radius,box-shadow,border-image
			<html> <head> <meta charset="UTF-8"> <title></ ... 
- 使用短信猫发送短信java代码
			短信猫简单配置:https://www.cnblogs.com/Big-Boss/p/9699880.html 发送短信: package utils; import org.smslib.AGate ... 
- easyUI combobox的使用
			1.需要用到的方法 设置组合框(combobox)值的数组. $('#cc').combobox('setValues', ['001','002']); 设置组合框(combobox)的值. $(' ... 
- Windows 错误 0x80070570
			Windows程序运行或者删除文件提示错误0x80070570:文件或目录损坏且无法读取. 环境 Windows 10 解决办法 管理员权限打开cmd,输入chkdsk 盘符: /f,提示输入Y,修复 ... 
