vue中路由返回上一个页面,恢复到上一个页面的滚动位置
第一步:路由文件的配置(对你所需要的vue文件进行保存缓存标志的添加)
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import Message from '@/components/Message'
import Search from '@/components/Search'
import Home from '@/components/bottomBar/Home'
import Person from '@/components/bottomBar/Person'
import Release from '@/components/bottomBar/Release'
import Collection from '@/components/bottomBar/Collection' Vue.use(Router);
const routes =[
{
path: '/',
name: 'HelloWorld',
component: HelloWorld,
children: [
{
path:'home',
component:Home, meta: {
title: 'home',
keepAlive: true
}
},
{
path:'person',
component:Person
},
{
path:'release',
component:Release
},
{
path:'collection',
component:Collection
}
]
},
{
path:"/message",
component:Message
},
{
path:"/search",
component:Search
}
];
const router = new Router({
routes,
}); export default router
第二步:router-view的设置
<template>
<div id="index">
<keep-alive >
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
<van-tabbar v-model="active">
<van-tabbar-item icon="home" to="/home">首页</van-tabbar-item>
<van-tabbar-item icon="records" to="/release">发布</van-tabbar-item>
<van-tabbar-item icon="idcard" to="/collection">收藏</van-tabbar-item>
<van-tabbar-item icon="contact" to="/person" :dot="true">个人中心</van-tabbar-item>
</van-tabbar> </div>
</template> <script>
export default {
data () {
return {
value:"",
active:
}
},
mounted(){
this.$router.push("/home")
},
methods:{ }
}
</script> <!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="less">
#index{
.van-tabbar{
height: .1rem;
border-top: 1px solid #eee;
.van-tabbar-item--active{
color: orange;
}
.van-tabbar-item__icon{
font-size: .5rem;
.van-info{
padding: .05rem .1rem;
line-height: .3rem;
right:-.1rem;
}
}
}
}
</style>
第三步:在你需要保存位置的vue文件里面进行操作
<template>
<div class="htmlGlobal">
<div id="home">
<van-row>
<van-col span="" id="message" @click.native="goToMessageHtml">
<van-icon name="chat" :class="{'dot':true}"/>
</van-col>
<van-col span="" id="search">
<van-search
placeholder="搜你感兴趣的"
v-model="value"
background="orange"
@focus="goToSearchHtml"
/>
</van-col>
<van-col span=""></van-col>
</van-row>
</div>
<div id="noticeBar">
<van-notice-bar mode="closeable"
:text=noticeValue
left-icon="http://img.yzcdn.cn/vant/volume.png"
/>
</div>
<div id="vanSwipe">
<van-swipe :autoplay="" indicator-color="orange">
<van-swipe-item></van-swipe-item>
<van-swipe-item></van-swipe-item>
<van-swipe-item></van-swipe-item>
<van-swipe-item></van-swipe-item>
</van-swipe>
</div>
<div id="vanTabs" >
<van-tabs swipeable v-model="tabActive" :class="{'fixed':fixed}">
<van-tab v-for="(item,index) in tabsArr" :title="item.name" :key="index">
</van-tab>
</van-tabs>
<ShopList :index="tabActive"></ShopList>
</div>
</div>
</template> <script> import ShopList from '../ShopList'
export default {
beforeRouteLeave(to, from, next){
this.$store.commit("set_scrollTop",this.scroll);
next();
},
activated () {
this.$nextTick(function(){
let position = this.$store.state.scrollTop; //返回页面取出来
window.scrollTo(, position); })
},
components:{
ShopList
},
data(){
return{
scroll:,
fixed:false,
value:'',
//二手物品的分类信息
tabsArr:[
{
name:"书籍",
requestCode:"",
},
{
name:"生活百货",
requestCode:"",
},
{
name:"乐器",
requestCode:"",
},
{
name:"数码",
requestCode:"",
},
{
name:"服饰鞋包",
requestCode:"",
},
{
name:"美妆捡漏",
requestCode:"",
},
{
name:"运动户外",
requestCode:"",
},
{
name:"健身器材",
requestCode:,
}
],
noticeValue:"足协杯战线连续第2年上演广州德比战",
tabActive:
}
},
methods:{
goToMessageHtml(){
this.$router.push("/message");
},
goToSearchHtml(){
this.$router.push("/search");
},
handleScroll(){
if(document.getElementById('vanTabs')){
this.scroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
var offsetTop = document.getElementById('vanTabs').offsetTop;
if (this.scroll > offsetTop) { this.fixed = true;
} else {
this.fixed = false
}
}
} }, destroyed () {
window.removeEventListener('scroll', this.handleScroll)
},
mounted(){
this.$nextTick(()=>{
window.addEventListener('scroll', this.handleScroll)
})
}
}
</script> <style lang="less">
.fixed{
position: fixed !important;
top: ;
left: ;
}
.htmlGlobal{
background-color: #ccc;
box-sizing: border-box;
}
#home{
background-color:orange;
height: 1rem;
box-sizing: border-box;
padding: .1rem;
.van-row{
height: %;
#message{
height: %;
.van-icon{
font-size: .5rem;
top: -.4rem;
left: .13rem;
color: #fff;
.van-info{
padding: .05rem .1rem;
line-height: .3rem;
right:-.05rem;
}
} }
#search{
.van-search{
padding: ;
padding-top: .1rem;
.van-cell{
border-radius: 20px;
height: .6rem;
.van-cell__left-icon{
font-size: .4rem;
position: absolute;
top: .15rem;
bottom: .1rem;
}
.van-field__body{
position: absolute;
left: .5rem;
top: .05rem;
bottom: .1rem;
right: ;
input{
font-size: .3rem;
}
}
}
}
}
} }
#noticeBar{
.van-notice-bar{
height: .8rem;
.van-notice-bar__left-icon {
height: %;
line-height: .8rem;
img{
width: .4rem;
height: .4rem;
vertical-align: middle;
}
}
.van-notice-bar__wrap{
height: %;
line-height: .8rem;
.van-notice-bar__content{
font-size: .3rem;
}
}
.van-icon.van-icon-close.van-notice-bar__right-icon{
font-size: .35rem;
right: .1rem;
top: .22rem;
}
}
}
#vanSwipe{
.van-swipe{
/*margin: 0 .3rem;*/
height:3rem;
.van-swipe-item{
background-color: deepskyblue;
border-radius: 5px;
}
}
}
#vanTabs{
.van-tabs{ }
}
</style>
vue中路由返回上一个页面,恢复到上一个页面的滚动位置的更多相关文章
- vue中路由按需加载的几种方式
使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hello' import ...
- vue中,对象数组多层嵌套时,更新数据更新页面
vue中的对象和数组的元素直接赋值修改时,是不能响应到view中去的 1.对象更新 this.a={title:'列表1’}; this.a.title='列表2’; <h1>{{a.ti ...
- Vue中路由的使用
在Vue中动态挂载组件 首先需要安装 cnpm install vue-router --save 在main.js中引入VueRouter 并使用 定义一个路由 创建router实例 通过rout ...
- Vue中ajax返回的结果赋值
这是第二次在项目中遇到此问题,ajax请求成功后在success函数中为Vue实例data里的变量赋值,却失败了 new Vue({ el:'#app', data:{ msg:'' }, creat ...
- VUE中实现iview的图标效果时遇到的一个问题
[Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available ...
- vue-router 页面切换后保持在页面顶部而不是保持原先的滚动位置的办法
vue-router有提供一个方法scrollBehavior,它可以使切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样. 这个功能只在 HTML5 history 模 ...
- vue中路由传参的方式
一.params的类型: 配置路由格式: /router/:id 传递的方式: 在path后面跟上对应的值 传递后形成的路径: /router/123, /router/abc 通过:to字符串拼接的 ...
- 【每天学一点-06】在Vue中使用Vant-Picker选择器,并且给选择器添加一个类似Antd-Select-showSearch的搜索功能
一.在Vant文档中,Picker组件的API中是没有showSearch这一选项的 1.Vant-Picker 文档 2.Antd-Select 文档 3.需要完成的需求 4.因为在H5项目中出现了 ...
- Vue中data返回对象和返回值的区别
速记:粗浅的理解是,事件的结果是影响单个组件还是多个组件.因为大部分组件是要共享的,但他们的data是私有的,所以每个组件都要return一个新的data对象 返回对象的时候 <!DOCTYPE ...
随机推荐
- 01 Getting Started 开始
Getting Started 开始 Install the Go tools Test your installation Uninstalling Go Getting help Downlo ...
- 洛谷P2341受欢迎的牛
传送门啦 这是一个tarjan强连通分量与出度结合的例题. 先明确一下题意,如果这个点(缩点之后的)没有出度,这个点才能成为明星牛(明星牛的定义是:所有牛都喜欢他才可以). 由于我们进行了缩点,所以我 ...
- 根据后端传的时间前端js进行倒计时
一.故事背景: 1. 今天公司有个项目需求 2. 在前端页面实现一个倒计时功能 3. 初步设想:后端根据需求规定一个未来的时间,前端根据当前时间进行计算 4. 然后将时间格式化,时分秒的格式 5. 时 ...
- 在SQL中有时候我们需要查看现在正在SQL Server执行的命令
在SQL中有时候我们需要查看现在正在SQL Server执行的命令.在分析管理器或者Microsoft SQL Server Management Studio中,我们可以在"管理-SQL ...
- PL/SQL开发中动态SQL的使用方法
一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使 ...
- PHP性能调优---PHP调试工具Xdebug安装配置教程
说到PHP代码调试,对于有经验的PHPer,通过echo.print_r.var_dump函数,或PHP开发工具zend studio.editplus可解决大部分问题,但是对于PHP入门学习的童鞋来 ...
- C/C++经典面试题
1.指向数组的指针 和 指向数组首元素的指针 2018-03-07 昨天在牛客上看到这么一道C语言面试题,挺经典的,特来分享给大家. 程序如下,问输出结果 #include <stdio.h&g ...
- css实现360导航首页超链接变色
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JOIN从句
MySQL基础表和数据 -- 5条数据 select * from test_a; -- 8条数据 select * from test_b; 内连接 -- 内连接,join,为inner join的 ...
- day6 subprocess模块、logging模块
logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储 ...