我要投稿
投诉建议
首页
Web前端
后端技术
数据应用
编程语言
其他语言
技术落地
科技领域
SEO
科技迭代
当前位置:
首页
>
Web前端
>
vue.js
手写vue-router核心原理
时间:2023-03-31 19:27:57
vue.js
最近也在观察vue3的新特性,抽空玩玩嵌套路由的vue-router,直接进入代码项目目录结构代码展示app.vue
索引|
个人|
PersonInfo
Index.vue
这是索引页
Person.vue
thisispersonpage
PersonInfo.vue
这是每个sonInfo页
vue全家桶视频讲解:进入学习js文件main.jsimportVuefrom'vue'importAppfrom'./App.vue'importrouterfrom'./router'newVue({router,render:h=>h(App)}).$mount('#app')babel.config.js需要添加babel依赖来支持新的语法,比如optionalchainnpminstall--save-dev@babel/core@babel/clinpminstall--save-dev@babel/plugin-proposal-optional-chainingmodule.exports={预设:['@babel/preset-env'],插件:['@babel/plugin-proposal-optional-chaining']}router目录文件index.jsimportVuefrom"vue";importVueRouterfrom"./vue-router";importIndexfrom"../views/Index.vue";importPerson来自“../views/Person.vue”;从“../views/PersonInfo.vue”导入PersonInfo;Vue.use(VueRouter);constroutes=[{path:"/",name:"Index",component:Index},{path:"/person",name:"Person",组件:Person,children:[{path:"/person/info",name:"PersonInfo",component:PersonInfo}]}];constrouter=newVueRouter({routes});exportdefaultrouter;vue-router.js这里首先使用Vue的工具Vue。util.defineReactive实现了数据响应,后来手工撕掉了这个库$options=optionsthis.current=window.location.hash.slice(1)||"/"//设置响应式数组数据Vue.util.defineReactive(this,"routerArray",[])//监听哈希值变化window.addEventListener("hashchange",this.hashChange.bind(this))this.getRouterArray()}hashChange(){this.current=window.location.hash.slice(1)||“/”this.routerArray=[]this.getRouterArray()}getRouterArray(routes){routes=routes||this.$options.routesfor(constrouteofroutes){if(this.current==='/'&&route.path==='/'){this.routerArray.push(route)return}if(this.current.indexOf(route.path)!==-1&&route.path!=='/'){this.routerArray.push(route)if(route.children){//递归子路由this.getRouterArray(route.children)}return}}}}VueRouter.install=function(_Vue){Vue=_Vue//Vueglobalmixin,newVue中的router实例创建完成后,挂载到Vue上});//注册router-link和router-view全局组件Vue.component("router-link",routerLink)Vue.component("router-view",routerView)}exportdefaultVueRouterrouter-link.jsexportdefault{props:{to:{type:String,required:true}},render(h){returnh("a",{attrs:{href:"#"+this.to,},},this.$slots.默认);}};router-view.jsexportdefault{render(h){//设置嵌套路由标识符this.$vnode.data.rv=true//设置嵌套路由的深度letdepth=0letparent=this.$parentwhile(parent){//parent有嵌套路由标志rv为真,深度加一if(parent.$vnode?.data?.rv){depth++}parent=parent.$parent}//简单处理constroute=this.$router.routerArray[depth]returnh(route?.component);}};效果图做好了,今天先玩到这里,下次再玩其他游戏
上一篇:
ant-sime-pro发布了,支持vue3.0,react,angular,typescript,全网首发
下一篇:
Vue源码虚拟DOM解析
手写vue-router核心原理相关文章
聚焦智能化两大核心领域剖析行业形势
《核心人类新玩法》购买AMD锐龙笔记本,迎接返校季!
Apple AirPods 无线耳机有何过人之处?说说核心技
掌握核心技术的4K激光电视,坚果秋季发布会最大亮点可能就在这
云之声创新事业部总裁陈继胜:AIoT人机交互云核心的演进
小鸟看 Pico Neo VR 体验评测 骁龙 820 核心
Apple Watch 核心代工尘埃落定!三星赢得“心”
阿里云三大核心板块完成!关注IoT,上线小米云,一大波新应用
智能手表挑战机械手表比比内的“核心”大戏
智能穿戴设备!传感器是智能的核心?
VR还有多少潜力?揭秘高通骁龙核心黑科技
结成联盟,规范提升核心竞争力,深圳智能穿戴产业异军突起
智能可穿戴设备的爆发尚未到来,用户体验是核心
决定未来的八项核心技术! AR、VR榜上有名
对话英特尔杨旭!人工智能产品事业部的三大核心使命
【核心守护腕间幸福】H-One健康手表
国内可穿戴设备市场分析:虽然缺乏核心技术,但未来依然光明
在苹果市值达到万亿美元之前! WWDC18 核心亮点剧透
可穿戴设备的用户粘性是一个问题,核心价值才是出路
VR-AR的三大核心领域!内容、平台、硬件这三个方面谁将成为
最新推荐
1
马志强!五个特点打造青云SD-WAN产品核心优势
2
CODING获腾讯云1亿元B+轮融资,推出Cloud Stu
3
盘点HTC Vive、Oculus Rift、PlaySta
4
【盘点】智能穿戴行业五项核心技术
5
时隔两年,Wear OS智能手表终于等到了高通新核心
6
智能可穿戴设备发展潜力巨大,核心技术壁垒仍需攻克
7
苹果雄心勃勃,2018年再投资140亿美元打造自研核心技术
8
可穿戴产品越来越多,中外厂商都在强化产品核心
9
海信电视U9D!显示技术成核心
10
“核心太软了”! IoT和数据中心已成蓝海
猜你喜欢
1
百度地图举办“LBS+AI”沙龙,分享语音AR等核心技术,全
2
盘点智能穿戴行业五项核心技术
3
智能家居核心入口TCL在柏林首次亮相曲面全屏C7电视
4
致力于中药国际化,天士力依托核心技术打造现代中药“智造”产业
5
可穿戴设备的世界充满了危险,掌握核心技术才能勇往直前
6
华米科技宣布收购Zepp-PEI核心资产!拓展高端运动产品市
7
智能核心,致永恒——HUAWEI WATCH使用回顾
8
产业井喷 我国智能穿戴产业核心技术仍缺失
9
AI人才大战!跳槽只是闲话,人才标准才是核心
10
盘点智能穿戴设备必备的九大核心芯片
11
博云作为核心编写单位参与首个微服务标准制定
12
CSHE2016机器人论坛畅谈人工智能及机器人核心技术
13
对话百度特工负责人景坤!四大核心场景打造标杆产品渡鸦智能音箱
14
浙江农信联携手我趣科技,互联网技术助推在线金融核心平台
15
中国声谷50亿发展基金重点支持拥有核心技术的人工智能项目
16
大德中电谢卫华独家专访!智能家居的核心是控制系统
17
物联网革命的核心是“网络”而不是“物”
18
机器人领域的这10项核心技术你听说过哪些?
19
以智能化为核心价值,TCL空调展现新动力
20
NVIDIA全新TITAN X显卡详细规格发布!核心471m