Vue Router添加全局$router属性的示例详解

 更新时间:2023年11月23日 09:01:14   作者:BNTang  
这篇文章主要介绍了Vue-Router-添加全局$router属性,在 Vue 中有一个 mixin 方法,这个方法会在每个组件创建之前被调用,我们可以在这个方法中将 VueRouter 实例挂载到 Vue 实例上,本文给大家介绍的非常详细,需要的朋友可以参考下

前言

经过上一篇文章的介绍,完成了初始化路由相关信息的内容,接下来我们需要将路由信息挂载到Vue实例上,这样我们就可以在Vue实例中使用路由信息了。

简而言之就是给每一个Vue实例添加一个$router属性,这个属性就是我们在上一篇文章中创建的VueRouter实例。

实现思路

我们需要在Vue实例创建之前,将VueRouter实例挂载到Vue实例上,这样我们就可以在Vue实例中使用$router属性了。

在我们实现的 NueRouter 时,我们通过 Vue.use 来安装好我们的路由插件,那么在编写插件中有一个 install 方法,这个方法会在 Vue.use 时被调用,我们可以在这个方法中将 VueRouter 实例挂载到 Vue 实例上。

在 Vue 中有一个 mixin 方法,这个方法会在每个组件创建之前被调用,我们可以在这个方法中将 VueRouter 实例挂载到 Vue 实例上。

重写 beforeCreate 方法,将 VueRouter 实例挂载到 Vue 实例上。在 beforeCreate 方法中,我们可以通过 this.$options.router 获取到我们在 new Vue 时传入的 router 对象,然后将这个对象挂载到 Vue 实例上。如果通过 this.$options.router 获取到了 router 对象,那么就说明这个 Vue 实例是根实例,我们就可以将 router 对象挂载到 Vue 实例上了。

如果获取不到 router 对象,那么就说明这个 Vue 实例不是根实例,我们就需要将父组件的 router 对象挂载到 Vue 实例上。

大致思路就是这样,接下来我们来实现一下。

代码实现

NueRouter.install = (Vue, options) => {
    Vue.mixin({
        beforeCreate() {
            if (this.$options && this.$options.router) {
                this.$router = this.$options.router;
                this.$route = this.$router.routerInfo;
            } else {
                this.$router = this.$parent.$router;
                this.$route = this.$router.routerInfo;
            }
        }
    })
}

如上的代码就是我们实现的思路,我们通过 this.$options.router 获取到我们在 new Vue 时传入的 router 对象,然后将这个对象挂载到 Vue 实例上。如果获取不到 router 对象,那么就说明这个 Vue 实例不是根实例,我们就需要将父组件的 router 对象挂载到 Vue 实例上。

测试

接下来就是我们平时要进行的测试了,分别在各个组件当中打印一下 $router$route 属性,看看是否挂载成功。

App.vue:

mounted() {
    console.log("App", this.$router);
    console.log("App", this.$route);
}

Home.vue:

mounted() {
    console.log("Home", this.$router);
    console.log("Home", this.$route);
}

About.vue:

mounted() {
    console.log("About", this.$router);
    console.log("About", this.$route);
}

最后我们来看一下效果:

可以看到我们的路由信息已经挂载到 Vue 实例上了。

最后

到这里我们就完成了将路由信息挂载到 Vue 实例上的功能,接下来下一篇文章我会带着大家来实现 实现router-link

到此这篇关于Vue-Router-添加全局$router属性的文章就介绍到这了,更多相关Vue Router $router属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)

    vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)

    这篇文章主要介绍了vue项目中使用AES实现密码加密解密的方法,主要是通过ecb和cbc两种模式,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 详解打造 Vue.js 可复用组件

    详解打造 Vue.js 可复用组件

    Vue.js 是一套构建用户界面的渐进式框架。我们可以使用简单的 API 来实现响应式的数据绑定和组合的视图组件。
    2017-03-03
  • Element Backtop回到顶部的具体使用

    Element Backtop回到顶部的具体使用

    这篇文章主要介绍了Element Backtop回到顶部的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • vue打包后出现空白页的原因及解决方式详解

    vue打包后出现空白页的原因及解决方式详解

    在项目中很多时候需要用到vue打包成html不需要放在服务器上就能浏览,根据官网打包出来的html直接打开是显示空白,下面这篇文章主要给大家介绍了关于vue打包后出现空白页的原因及解决方式的相关资料,需要的朋友可以参考下
    2022-07-07
  • npm ERR! code 128的错误问题解决方法

    npm ERR! code 128的错误问题解决方法

    这篇文章主要介绍了解决npm ERR! code 128的错误问题,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • vue组件中重新渲染的3种方式小结

    vue组件中重新渲染的3种方式小结

    本文主要介绍了vue组件中重新渲染的3种方式小结,主要包括改变key,v-if,vm.$forceUpdate()这三种,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Vue自定义指令v-focus实例详解

    Vue自定义指令v-focus实例详解

    这篇文章主要为大家介绍了Vue自定义指令v-focus实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • vue项目开启Gzip压缩和性能优化操作

    vue项目开启Gzip压缩和性能优化操作

    这篇文章主要介绍了vue项目开启Gzip压缩和性能优化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 学习vue.js表单控件绑定操作

    学习vue.js表单控件绑定操作

    这篇文章主要和大家一起学习vue.js表单控件绑定操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • vue项目,代码提交至码云,iconfont的用法说明

    vue项目,代码提交至码云,iconfont的用法说明

    这篇文章主要介绍了vue项目,代码提交至码云,iconfont的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07

最新评论