不好意思,标题比较啰嗦,因为这次的流水账确实属于一个比较细节的小东西,下面详细讲:
1需求
最近在使用electron-vue 开发一个跨平台的桌面端软件,刚上手写了几个页面,遇到一个问题:桌面端软件通常会有导航需求,类似下图
导航按钮
点击返回按钮,返回上一页,并且显示上页内容。其实不止App,即使普通的网页中也会有此类需求,尤其是使用vue写SPA时。
项目中的导航几乎都是采用router.push({name: 'xxx', params: {xxx:123...}})这种方式。这种方式导致的一个直接问题是:当点击后退按钮(调用 router.go(-1))时,history中只保存了URL而丢失了params对象,进而导致依赖params的页面渲染异常。
2 解决
其实思路很简单,既然是在后退操作中丢失了params,那么我们自然会想到:如何保存一下params!没错,就是这么粗暴,你既然要丢,我就把你保存一下!
怎么存: 其实想都不用想这是一个跨组件通信问题拉,所以很自然的,用Vuex保存是最合乎常理的咯!
什么时候存:第一反应,调用 router.push({name: 'xxx', params: {xxx:123...}})时保存,然后如果导航回到这个URL,如果没有params,尝试从vuex store里取。似乎没错,就是麻烦了点儿!!别慌,咱们有导航钩子 router.beforeEach((to, from, next) => { // ... }) 啊!
正如其名,vue-router 提供的导航钩子主要用来拦截导航,让它完成跳转或取消。
说到这儿,你应该完全明白我的解决思路了,那下面废话就不多说了,上代码:
/* Vuex store 定义存储对象RouterParams */ //... const state = { //定义一个存储map,key:导航name,value:导航params paramMap: {} } const mutations = { REFRESHPARAM (state, paramKV) { //mutation,应该能看懂做的操作吧? Vue.set(state.paramMap, paramKV.key, paramKV.value) } } //...
/* router中设置一个全局导航钩子 */ const router = new VueRouter({ ... }) //router router.beforeEach((to, from, next) => { // 只有在找不到params时才"出此下策" if (Object.keys(to.params).length === 0) { // 从store中取出付给params,此处注意路径未必完全吻合,以你的为准 Object.assign(to.params, store.state.RouterParams.paramMap[to.name] || {}) } // 存储一下params备用 store.commit('REFRESHPARAM', {key: to.name, value: to.params}) next() // 千万不要忘了,否则导航会被“掐死”在这儿。:-D }) //...
很简单吧!总共没有几行代码 O(∩_∩)O~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
问题内容: 我想在使用Android的导航抽屉切换片段时保存片段的状态。如果该片段先前已加载,则不应刷新。可能吗? 问题答案: 要保持片段的状态,您必须在片段的内调用。它能做什么: 控制是否在活动重新创建期间保留片段实例(例如通过配置更改)。 这样可以保持活动重新创建的状态,但是在这种情况下,将不会重新创建活动,而是使用抽屉手动切换片段。在这种情况下,您不必在抽屉的click侦听器中创建新的片段,
我想在使用androids导航抽屉切换片段时保存片段的状态。如果片段先前已加载,则不应刷新。有可能吗?
我是Android开发新手,所以我不明白很多,也许是基本的东西,也许甚至陈述的主题也没有完全反映我的问题,我事先道歉,我不能更准确地表述。请帮我回答一些问题。 我的应用程序中有一个底部导航,有三个菜单项。就像图片上一样: 底部导航 最初,我是按照标准的Android Studio示例来做的: 在这段代码中,菜单项切换片段,保存每个片段的状态(我不知道具体如何,它似乎在导航控制器内部的某个地方)。
本文向大家介绍Vuex的实战使用详解,包括了Vuex的实战使用详解的使用技巧和注意事项,需要的朋友参考一下 写在前面 我是一个看技术的文档不喜欢官方的人,觉得官方写的任何东西都是比较正式的,让人有点不想看的赶脚,我这里也不贴官方的那个图了,这里也不解释了(其实是我也不想研究)所以我一般都是百度一些别人的经验之谈,看别人的经验之谈可以让你少踩一些坑,而且是可以直接看到效果的,所以这里也是,我们不按照
我有一个带有导航抽屉的应用程序,一个活动和许多片段。当我改变设备方向时,我的主要活动是重新创建,出现的是我的主要片段,而不是当前片段。就像我启动应用程序时一样。 如何恢复当前片段以及与所选片段相关的数据? 我看过这篇文章,但它不起作用:用抽屉菜单保存片段状态 提前感谢那些能帮助我的人。
当我在导航抽屉中的不同片段之间切换时,我试图保存导航抽屉片段上的状态。例如:我从片段A开始触发一些事件,然后切换到片段B。然后我想在从片段B切换回片段A时看到片段A的相同状态。 我尝试使用onSavedInstanceState(Bundle savedInstanceState),但只有当片段生命周期中的方向发生变化时才会调用它。每当我切换到新片段时,都会创建一个新片段,我不知道如何从片段中保存