当前位置:首页 > 技术分析 > 正文内容

深入理解vue-router原理

ruisui885个月前 (01-12)技术分析41

说到vue-router就表明他只适合于vue和vue是强绑定的关系;不适合其他框架;

现在我们模仿实现一个VueRouter;

1.要使页面刷新;借助vue本身的响应式原理;

import Home from "./views/Home";
import About from "./views/About";
import Vue from "vue";   
class VueRouter{
    constructor(options){
        this.$options = options;
        this.routeMap = {}

        // 路由响应式 其实很重要的一部分是借助了 vue 的响应式原理 ; 强绑定 ; 必须用在vue上
        this.app = new Vue({
            data:{
                current:"/"
            }
        })
    }
}

VueRouter.install=function(Vue){
    //mixin 混入
    Vue.mixin({
        beforeCreate() {
            // this 是vue 实咧
            if(this.$options.router){  // 只在跟组件执行一次
                Vue.prototype.$router = this.$options.router;
                this.$options.router.init()
            }
        },
    }) 

}
Vue.use(VueRouter)
export default new VueRouter({
    routes: [{ path: "/", component: Home }, { path: "/about", component: About }]
})

2.执行上面的init函数;初始化

//这里主要三件事;监听url变化;解析路由配置;实现两个组件
init(){
        this.bindEvents() ; //监听url变化
        this.createRouteMap(this.$options) ; //解析路由配置
        this.initComponent() ; //实现两个组件 router-view  router-link
    }

3.监听url变化;更新数据

  bindEvents(){
        window.addEventListener('load',this.onHashChange.bind(this))
        window.addEventListener('hashchange',this.onHashChange.bind(this))
    }
    onHashChange(){
        this.app.current = window.location.hash.slice(1) || '/';  // #/about  ==> /about
    }

4.解析路由配置;

//这个好理解;就是把传进来的路由配置;解析成path-->component的key:value形式
createRouteMap(options){
        options.routes.forEach(item=>{
            this.routeMap[item.path] = item.component
        })
  }

5.实现router-link 和 router-view两个组件

 initComponent(){
        // router-view router-link
        Vue.component('router-link',{  
            props:{to:String},
            render(h) {
                // h => createElement  h(tag,data,children)
                return h('a',{attrs:{href:'#'+this.to}},[
                    this.$slots.default
                ])
            },
        });
        Vue.component('router-view',{     //这里没有解决路由嵌套的问题   // 全局的组件 任意data 的都会出发全局组件的跟新
            render:h=>{
                console.log(this.routeMap[this.app.current])
                const comp = this.routeMap[this.app.current]
                return h(comp)
            },
        })
    }

vue-router的hash模式主要就是监听了hashchange方法;改变当前的路径,再利用vue自身的响应式原理;来刷新视图;

vue-history模式;要服务器配合;访问进来是指向同一个html;代码上处理原理我想和hash应该类似;大家可以自己研究一下;


人到了一定的年龄,一定要懂得,把心情和脾气调成静音模式,然后不动声色打理自己,过好余生每一天。一路风雨兼程,只为遇见更好的自己,真正能够带你走出黑暗,能够给你带来改变的,就是你自己的内心自信,光明,有拯救自己的责任感动力

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/227.html

标签: vue路由传值
分享给朋友:

“深入理解vue-router原理” 的相关文章

Gitlab 的使用和代码审查流程介绍

1、先简洁介绍下项目常用的信息-面板统计页面2、用户信息面板3、服务器信息4、项目信息5、重点介绍代码提交审核机制和授权合并机制开发人员推送代码的时候不能直接推送到master,否则就会报错。此时开发人员要本地新建分支然后在提交上来列出修改了哪些细节管理员可以管理这些分支合并到master6、指派合...

15款测试html5响应式的在线工具

手机、平板灯手持设备的增多,网站要顺应变化,就必须要做响应式开发,响应式网站最大的特点在于可以在不同设备下呈现不同的布局,是基于html5+css3技术,目前越来越多的网站开始采用了响应式设计,而下面15款工具可以方便测试你的html5响应式效果。Responsinatorhttp://www.re...

2024年,不断突破的一年

迈凯伦F1车队不久前拿下了2024年度总冠军,距离上一次还是二十几年前。在此期间,另一领域内,一个充满革新活力的腕表品牌——RICHARD MILLE理查米尔,正不断发展,与F1运动、帆船、古董车展等领域,共享着对速度与极限的无尽向往。RICHARD MILLE的发展与F1车手们在赛道上的卓越表现交...

Vue页面传参详解

一、两种方式方法1:name跳转页面this.$router.push({name:'anotherPage',params:{id:1}})另一页面接收参数方式:this.$route.params.id示例:控制台展示:方法2:path跳转页面this.$router.push(...

vue打开新窗口并且实现传参,有图有真相

我要实现的功能是打开一个新窗口用来展示新页面,而且需要传参数,并且参数不能显示在地址栏里面,而且当我刷新页面的时候,传过来的参数不能丢失,要一直存在,除非我手动关闭这个新窗口,即浏览器的标签页。通过面向百度编程,发现网上的根本达不到这个效果,而且还都是坑,明明实现不了,还若有其事的写出来,于是我在标...

Ruoyi-vue第五十二章:Uniapp小程序配置tabbar底部导航栏

一、功能实现效果如下图底部的tabbar二、uniapp的tabBar如果应用是一个多 tab 应用,可以通过 tabBar 配置项指定一级导航栏,以及 tab 切换时显示的对应页。在 pages.json 中提供 tabBar 配置,不仅仅是为了方便快速开发导航,更重要的是在App和小程序端提升性...