系列教程-从零开始写一个Vue插件- Simple Navigator(一)

教程(一):在写插件前考虑的一二三点。

背景

接触Vue算是比较久了,平时项目里主要是数据处理以及各种组件的调度。深的东西有,但是比较重复。如何跳出这种舒适区提升自己的技能,算是摆在每个程序员面前的一道坎。
教程为不长的系列教程,从零开始写一个navigator插件,干货应该还是有。

需求分析

需求1:

在实践中遇到这样的场景,一个多页面多层次的应用,路由管理是比较麻烦的。页面A携带参数调转页面B(页面B需要携带的参数进行异步操作),再跳转页面C。如果页面C回退到页面B,B该如何处理?
直接方法是使用router.go(-1) -- ( router.back())为类似原理。go的实质是在history的heap上跳转,当go到达某一页时,该页面会重新回到初始生命周期,即如果存在created,mounted钩子函数,将会重新调用。那么从页面C回退到页面B时,怎么实现重新获取A传递的参数呢?

列出以下可行方案:

(1)动态路由匹配:

页面A跳转页面B时,通过设置router {path:'/b/:id'}方式跳转。
这里id就是传递的参数,go(-1)可以回退,使用this.$route.params获取参数。

(2)使用query拼接url:

页面A跳转页面B时,使用router.push({ path: 'b', query: { id: '3' }})。
路径变成 /b?id=3。这样回退后,页面通过this.$route.query获取参数

以下几点值得注意:

使用router({name,params})时,params只能和name搭配使用。router({path,params})是错误的。可行的匹配方式还有router({name,params,query})router({path,query})

在测试时发现一个有趣的现象:如果页面B的router设置为动态匹配:{path:'/d/:id'},页面A跳转页面B时,假如页面A当前router的params为{id:3}(这个可能是由页面C、D获得);携带参数为{name:'b',params:{test:2}}跳转到页面B后,页面B的router.params为{id:3,test:2},此时,页面B的路径为/b/3。(页面A的router.params.id在跳转到页面B时被自动合并到了页面B里面)
如果修改上述页面B的router设置{path:'/d/:idtest'},其他保持不变,再进行测试,可以发现B页面的路径变为了跟目录·\·,而在该页面想再次跳转会报错。
这是一个比较奇特的现象,感觉是一个疑似bug,后续有时间会再次进行测试。

上述方案基本思路是通过当前页面url获取需要的参数,然后进行渲染。那么有没有其他可行的方案呢?

能想到的骚操作有:

运用vuex进行中心管理,在页面跳转离开后记录当前页面需要的参数,当路由再次回退到该页面时,从vuex获取该参数进行渲染。

既然用了vuex,同样的思路通过localstorage储存相应参数。

弄这么麻烦干什么,页面B跳转页面C时,把A传递的参数传递给C,然后等C回退B时,再把参数传回来!!!!!别这么干,疯了。

以上就是目前想到的一些方法,如果有其他方案,欢迎大家一起探讨。

需求2:

既然说到回退机制,那么项目中的缓存机制也需要考虑。排除将页面数据整个静态化储存方案,可行的方法是使用keep-alive。 教程一般都是讲如何将页面状态进行缓存,但是如何将缓存清空呢?不可能遇到的页面都缓存起来吧。

以上就是我的插件需要解决的问题,后续教程将继续研究如何一步步解决问题实现功能。希望大家多多关注

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349