最近学vue.js和Node.js,有上述这样一个需求,用vue实现,想了很久没想到一个合理的解决方案。希望大家能给小白一个答案!
搜一下 html5 history API 和 前端路由 看看
如果你的页面是单页应用,Vuet可以实现你的需求
import Vue from 'vue'
import Vuet from 'vuet'
Vue.use(Vuet)
const vuet = new Vuet({
modules: {
testModule: {
data () {
return {}
}
}
}
})
new Vue({
// ...
vuet,
template: `
<div v-vuet-scroll.self="{ path: 'testModule', name: '随便给一个名字' }"></div>
`
})
如果你需要记录多个滚动条,调用多次v-vuet-scroll
这个指令,设置不同的名字即可
我也很想知道
@1340641314 我项目里用的是vuex,设置state是可以达到滚动到相应位置的效果,但是如果是多页面有这个需求,那存放的state会很多。而且最主要是的“前进刷新,后退不刷新数据”这个问题,只要这个解决了,我用vue-router的scrollBehavior和keep-alive能实现这个效果。
@jiasongs keep-alive
如果缓存详情的话,会出现打开其他页面时,会显示上一次访问的页面,体验的效果其实并不怎么好。
1、返回刷新问题,大多是代码问题 2、vuex记录上一次滚动的高度,组件挂载后scroll到vuex记录的高度
@1340641314 哇 这个项目很强 谢谢!
@kidbai 想过用vuex记录,但是如果多个页面需要记录的话,未免太多了些
之前我也有个需求,网上搜说用vue-router的 HTML5 History 模式 ,设置scrollBehavior:true和keep-alive就可以实现,但不知道为什么我这里没效果, 后来就用了类似楼上的方法,在beforeRouteLeave 时候 用vuex记录此时的window.pageYOffset,然后beforeRouteEnter 时候用window.scrollTo(0,刚才记录的高度)就可以了
@jiasongs 多个页面要记录是业务复杂度造成的,vuex只是一个方案
@spezz07 我是History scrollBehavior:true和keep-alive 可以实现滚动的位置。但是我项目的首页是缓存的,详情是不缓存的。在首页点进去详情再返回是有效果的,但是在详情页面点入其他页面,在返回就没有效果了,主要是因为我的详情页面没有缓存,返回时scrollBehavior先执行了,然后详情页面请求了数据,所以就没有效果了。现在想解决一下返回时不请求数据的问题。
@kidbai 其实我做的并不复杂,用vuex完全可以解决,但是我想知道“前进刷新,后退不刷新”这个怎么实现
@kidbai 总体来说就是A,B,C三个页面,A->B 刷新 B->A不刷新 B->C刷新 C->B不刷新
@spezz07 总体来说就是A,B,C三个页面,A->B 刷新 B->A不刷新 B->C刷新 C->B不刷新
@jiasongs 其实要实现这个并不复杂,有两种思路,
第一种:是直接缓存组件,判断url是否是前进还是后退,后退直接从缓存组件里面还原即可,你可以参考一下vue-navigation
第二种:对页面进行状态管理,如果页面是后退则直接还原状态,如果页面前进,则重置状态,Vuet
就属于第二种
关于第一种的思路,你可以看下这篇基于vue的移动web app页面缓存解决方案
@jiasongs 这篇文章你可以看下 用Vue 的include/exclude 功能,http://www.jianshu.com/p/0b0222954483 来进行缓存。不过我看楼上的那个Vuet解决方案 好像不错,我有机会也试下