Vue-router 路由详解 多级路由

218 篇文章 18 订阅

今天我来分享一下vue路由方面的心得体会。

文章源码位置 https://github.com/JustDoIt521/originCoding/tree/master/vue-router-base

使用的脚手架为Vue3.0,IDE为VSCode

首先引入vue路由

cnpm install vue-router --save-dev

然后我们在src目录下建立文件夹router,并创建文件index.js

项目大致结构如下

然后我们在view文件夹(新建一个)下创建文件 company.vue作为一个组件。company.vue代码如下

 
  1. <template>

  2. <div id="company">

  3. <h2>welcome to company</h2>

  4. </div>

  5. </template>

在index.js中创建路由,并引入company.vue文件。

 
  1. import Vue from "vue"

  2. import Router from "vue-router"

  3. //引入组件

  4. import company from "@/views/company.vue"

  5. //路由引入

  6. Vue.use(Router);

  7. const router = new Router({

  8. routes:[

  9. {

  10. name: "company", //路由名称

  11. path: "/company", //路由路径

  12. component: company //路由对应组件

  13. },

  14. {

  15. path: "/", //主路由重定向至company组件

  16. redirect: "/company"

  17. }]

  18. })

  19. //将路由组件暴露出去

  20. export default router;

 如此我们就可以把company组件引入路由,那么我们要想使用company组件,还需要在main.js中引入路由

 
  1. import Vue from 'vue'

  2. import App from './App.vue'

  3. import router from './router'

  4. Vue.config.productionTip = false

  5. new Vue({

  6. router,

  7. render: h => h(App),

  8. }).$mount('#app')

此时我们已经引入了路由到项目中,那么该怎么让组件显示出来,显示在哪里呢?

我们需要用到<router-view>,加载组件。在App.vue中此处添加代码<router-view></router-view>

App.vue

 
  1. <template>

  2. <div id="app">

  3. <img alt="Vue logo" src="./assets/logo.png" style="width:100px;height:100px;">

  4. <router-view></router-view>

  5. </div>

  6. </template>

然后让项目运行,你就可以看到如下界面,是不是很开心?

(浏览器地址栏)

 (界面)

现在我们假设世界上有两家公司,一个叫苹果,一个叫华为,他们属于company组件的子组件

声明组件huawei.vue   apple.vue

 
  1. <template>

  2. <div id="apple">

  3. <h3>welcome to apple</h3>

  4. </div>

  5. </template>

 
  1. <template>

  2. <div id="huawei">

  3. <h3>welcome to huawei</h3>

  4. </div>

  5. </template>

因为它们都是公司的范围,我们将其声明为company的子组件。因此在router文件夹下index.js中代码变更如下

 
  1. import Vue from "vue"

  2. import Router from "vue-router"

  3. //引入组件

  4. import company from "@/views/company.vue"

  5. import huawei from "@/views/huawei.vue"

  6. import apple from "@/views/apple.vue"

  7. //路由引入

  8. Vue.use(Router);

  9. const router = new Router({

  10. routes:[

  11. {

  12. name: "company", //路由名称

  13. path: "/company", //路由路径

  14. component: company, //路由对应组件

  15. children:[

  16. {

  17. name: "apple",

  18. path: "apple",

  19. component: apple

  20. },

  21. {

  22. name: "huawei",

  23. path: "huawei",

  24. component: huawei

  25. }

  26. ]

  27. },

  28. {

  29. path: "/", //主路由重定向至company组件

  30. redirect: "/company"

  31. }]

  32. })

  33. //将路由组件暴露出去

  34. export default router;

同时company.vue文件代码变更如下

 
  1. <template>

  2. <div id="company">

  3. <h2>welcome to company</h2>

  4. <div style=";margin-left:auto;margin-right:auto;flex-direction:row;">

  5. <div>

  6. <router-link to="/company/huawei"><h3>华为</h3></router-link>

  7. </div>

  8. <div>

  9. <router-link to="/company/apple"><h3>苹果</h3></router-link>

  10. </div>

  11. </div>

  12. <router-view></router-view>

  13. </div>

  14. </template>

此时界面变成这个样子

点击华为链接

如果你说,那苹果公司还有ipad,mac,iphone产品呢。那我们改造三级路由出来

在view文件夹下新建三个组件 ipad.vue  mac.vue  iphone.vue。代码结构类似,此处仅放出ipad.vue的代码

 
  1. <template>

  2. <div id="ipad">

  3. <span>welcome to ipad</span>

  4. </div>

  5. </template>

index.js文件代码变化如下

 
  1. import Vue from "vue"

  2. import Router from "vue-router"

  3. //引入组件

  4. import company from "@/views/company.vue"

  5. import huawei from "@/views/huawei.vue"

  6. import mac from "@/views/mac.vue"

  7. import apple from "@/views/apple.vue"

  8. import ipad from "@/views/ipad.vue"

  9. import iphone from "@/views/iphone.vue"

  10. //路由引入

  11. Vue.use(Router);

  12. const router = new Router({

  13. routes:[

  14. {

  15. name: "company", //路由名称

  16. path: "/company", //路由路径

  17. component: company, //路由对应组件

  18. children:[

  19. {

  20. name: "apple",

  21. path: "apple",

  22. component: apple,

  23. children: [

  24. {

  25. name: "mac",

  26. path: "mac",

  27. component: mac

  28. },

  29. {

  30. name: "iphone",

  31. path: "iphone",

  32. component: iphone

  33. },

  34. {

  35. name: "ipad",

  36. path: "ipad",

  37. component: ipad

  38. },

  39. ]

  40. },

  41. {

  42. name: "huawei",

  43. path: "huawei",

  44. component: huawei

  45. }

  46. ]

  47. },

  48. {

  49. path: "/", //主路由重定向至company组件

  50. redirect: "/company"

  51. }]

  52. })

  53. //将路由组件暴露出去

  54. export default router;

apple.vue组件代码变化如下

 
  1. <template>

  2. <div id="apple">

  3. <h3>welcome to Apple</h3>

  4. <router-link to="/company/apple/iphone">

  5. <h4>iphone</h4>

  6. </router-link>

  7. <div>

  8. <router-link to="/company/apple/ipad">

  9. <h4>ipad</h4>

  10. </router-link>

  11. </div>

  12. <div>

  13. <router-link to="/company/apple/mac">

  14. <h4>mac</h4>

  15. </router-link>

  16. </div>

  17. <router-view></router-view>

  18. </div>

  19. </template>

此时主页不会发生变化,但是当我们点击“苹果”链接,进行路由跳转的时候

点击iphone链接

iphone组件加载。

总结 这篇文章简单介绍了vue路由的引入以及二级三级路由的跳转,组件,子组件的问题。有同学可能会问:路由跳转的时候它是怎么确定跳转二级三级的呢? 很简单,我们在app.vue中加载<router-view> 会加载一级路由。此时我们在app中显示的company就是app的子组件,观察company组件代码,路由的写法是 <router-link to="/company/xxx"></router-link>当我们点击company组件内的路由链接,vue-router发现这是跳转到company组件下的xxx组件。那么router会在index.js中company的childern数组内找到xxx组件,然后自动加载在company组件内的<router-view>标签下,iphone、ipad、mac加载在apple组件下的道理一样。router会根据路由链接将组件加载到到对应组件下的<router-view>标签下。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值