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-print-nb只打印一页解决方法示例

    vue-print-nb只打印一页解决方法示例

    这篇文章主要为大家介绍了vue-print-nb只打印一页解决方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2023-11-11
  • 一篇文章带你了解Vue组件的创建和使用

    一篇文章带你了解Vue组件的创建和使用

    这篇文章主要为大家介绍了Vue组件的创建和使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 如何使用vue3+uni-app封装音乐播放插件

    如何使用vue3+uni-app封装音乐播放插件

    UniApp是一个基于Vue.js开发的跨平台应用开发框架,它可以使用一套代码同时构建iOS、Android和Web应用,这篇文章主要给大家介绍了关于如何使用vue3+uni-app封装音乐播放插件的相关资料,需要的朋友可以参考下
    2023-11-11
  • vue3父子组件传值 双向绑定及注意问题小结

    vue3父子组件传值 双向绑定及注意问题小结

    这篇文章主要介绍了Vue3中如何通过v-model实现父子组件的双向数据绑定及利用computed简化父子组件双向绑定,本文结合示例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • vue项目Network: unavailable的问题及解决

    vue项目Network: unavailable的问题及解决

    这篇文章主要介绍了vue项目Network: unavailable的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Vue项目中对index.html中BASE_URL的配置方式

    Vue项目中对index.html中BASE_URL的配置方式

    这篇文章主要介绍了Vue项目中对index.html中BASE_URL的配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • vue3项目中的el-carousel 轮播图的使用

    vue3项目中的el-carousel 轮播图的使用

    Carousel(走马灯)是一种常见的前端组件,通常用于展示多个项目(通常是图片或内容块)的轮播效果,这篇文章主要介绍了vue3项目中的el-carousel 轮播图的使用,需要的朋友可以参考下
    2024-02-02
  • vue的状态更新方式(异步更新解决)

    vue的状态更新方式(异步更新解决)

    这篇文章主要介绍了vue的状态更新方式(异步更新解决),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • Vue CLI4.0 webpack配置属性之productionSourceMap用法

    Vue CLI4.0 webpack配置属性之productionSourceMap用法

    这篇文章主要介绍了Vue CLI4.0 webpack配置属性之productionSourceMap用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • vue路由篇之router-view内容无法渲染出来问题

    vue路由篇之router-view内容无法渲染出来问题

    这篇文章主要介绍了vue路由篇之router-view内容无法渲染出来问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04

最新评论