vue 路由router

实现路由的切换

router/index.js

// 1.引入vue
import vue from 'vue'
// 2.引入VueRouter
import VueRouter from 'vue-router'

import Home from "../views/Home"
import About from "../views/About"
import Demo from "../views/demo01"

// 3.使用VueRouter
vue.use(VueRouter)

// 4.new 一个VueRouter对象赋值给一个常量
const r=new VueRouter({

  // 5.设置 路由方式
  mode:'history',

  // 6.在routers数组中写各种路由
  routes:[
    {
      // 7.在路由中写明路径和对应显示的组件
      path:"/",
      component:Home
    },
    {
      path:"/about",
      component:About
    },
    {
      path:"/demo",
      component:Demo
    }
  ]
})
// 8.将VueRouter开放出去
export default r

在views中新建组件,写点东西看的明显一点

<template>
  <div class="about">
    <h1>This is an about page</h1>
  </div>
</template>

在app.vue组件中写个标签,跳转到设置的路由

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <!-- 1.写一个跳转的标签跳转到对应的路由 -->
      <router-link to="/about">About</router-link>  |
      <button @click="fun()">demo页面</button>
    </div>
    <router-view />
  </div>
</template>

点击about,即可跳转到相应的路由并显示对应的组件

给路由发送数据 并在页面接收

app.vue

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>  
      
      <!-- 1.添加一个按钮,触发methods中的方法 -->
      <button @click="fun()">demo页面</button>
    </div>
    <router-view />
  </div>
</template>
<script>
export default {
  data() {
    return { str: "haha" };
  },
  methods: {
    fun() {
      // 2.在该方法中奖数据发送给路由对应的页面
      this.$router.push("/demo?name=" + this.str);
    },
  },
};
</script>

views中的demo01组件中

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png" />
    <h1>我是demo01</h1>
<!--1. 通过文本插值的方式获取值 -->
    <h2>我是获取到的数据{{ this.$route.query.name }}</h2>


<!-- 4.文本插值直接用自己的data数据即可 -->
    <h2>我是获取到的数据{{str}}</h2>
    
  </div>
</template>

<script>


export default {
  name: "Home",
  components: {
    HelloWorld,
  },
  // 2.在data中定义一个变量
  data() {
    return{
      str: ""
    }
    
  },
  created() {
    // 3.通过created方法将数据赋给data中的变量
    this.str = this.$route.query.name;
  },
};
</script>
     

运行结果

路由数据传输方法二

1.App.vue中传入数据给demo路由

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>
      <!-- 通过按钮的方式 -->
      <button @click="fun1()">点我跳转到demo页面</button>
    </div>
    <router-view />
  </div>
</template>
<script>
export default {
  data(){
    return{
      str:'我是App页面的数据'
    }
    
  },
  methods:{
    fun1() {
    // this.$router.push("/demo");
    // this.$router.push('/demo?name='+this.str)


    // --------------1.发送数据------------
    this.$router.push({
      path:'/demo',
      query:{
        name:this.str
      }
    })
  },
  }
  // -----------------------------------------
  
};
</script>

 2.在demo组件中接收数据

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <h1>我是demo页面</h1>

<!-- --------------3.获取数据 -------------------->
<h2>我是获取到的数据---:{{ this.$route.query.name }}</h2>
<!-- -------------------------------------- -->
 
  </div>
</template>

<script>
// @ is an alias to /src
// import HelloWorld from '@/components/HelloWorld.vue'

export default {
  name: 'Home',
  components: {
    // HelloWorld
  }
}
</script>

 3.运行结果,点击demo按钮即可跳转到demo路由并显示接收到的数据

路由数据传输方法三

1.在App.vue页面中传给demo路由数据

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>
      <!-- 通过按钮的方式 -->
      <button @click="fun1()">点我跳转到demo页面</button>
    </div>
    <router-view />
  </div>
</template>
<script>
export default {
  data(){
    return{
      str:'我是App页面的数据'
    }
    
  },
  methods:{
    fun1() {
    // this.$router.push("/demo");
    // this.$router.push('/demo?name='+this.str)
    // this.$router.push({
    //   path:'/demo',
    //   query:{
    //     name:this.str
    //   }
    // })


    // ------------------------第三种方式数据传输

    this.$router.push('/demo/123')
    // ------------------------------------------------
  },
  }
  
};
</script>

2.在router 中的 index.js 的路由中写入键名

import Vue from "vue";
import VueRouter from "vue-router";
import Home from "../views/Home"
import About from "../views/About"
import demo from "../views/demo"

Vue.use(VueRouter)
const r = new VueRouter({
  mode: 'history',
  routes: [{
      path: '/',
      component: Home
    },
    {
      path: "/about",
      component: About

    },
    //====== 2.在路由中传入键名 id
    {
      path: "/demo/:id",
      component: demo

    },
    // ----------------------------------
  ]
})
export default r

 3.在demo.vue中接收数据

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <h1>我是demo页面</h1>

<!-- <h2>我是获取到的数据---:{{ this.$route.query.name }}</h2> -->



<!-- -------------3.在demo页面中获取id------------------ -->
<h2>我是获取到的数据---:{{ this.$route.params.id }}</h2>
<!-- ---------------------------------------------------- -->




    <!-- <HelloWorld msg="Welcome to Your Vue.js App"/> -->
  </div>
</template>

<script>
// @ is an alias to /src
// import HelloWorld from '@/components/HelloWorld.vue'

export default {
  name: 'Home',
  components: {
    // HelloWorld
  }
}
</script>

运行结果:点击demo按钮,跳转到demo路由,并显示数据

路由案例

通过路由实现一个简易的学生管理系统页面

目录结构

主页面.MyApp.vue 

<template>
  <div>
    <div class="top">
      <h2>学生管理系统</h2>
      <!-- 1.点击按钮向方法传要跳转的路由 -->
      <button class="btn btn-info" @click="tiao1('/xueyuan/wuliu')">物流学院</button>
      <button class="btn btn-info" @click="tiao1('/xueyuan/it')">计算机学院</button>
      <button class="btn btn-info">艺术学院</button>
      <button class="btn btn-info">外语学院</button>
    </div>
    <div class="">
        <router-view></router-view>
    </div>
   
  </div>
</template>

<script>
export default {
methods:{
    // 2.通过点击事件传过来的参数跳转到相应的路由
    tiao1(v){
        this.$router.push(v) 
    }
}
};
</script>
 
<style lang = "less" >
.top{
    height: 150px;
    width:100%;
    background-color: rgb(64, 80, 85);
}
.main{
    height: 800px;
    width:100%;
    background-color: rgb(229, 231, 225);
}
.left{
    float: left;
    width: 20%;
    height: 400px;
    background-color: rgb(92, 120, 133);
}
.right{
    float: left;
     width: 80%;
    height: 400px;
    background-color: rgb(112, 105, 116);
}
h2{
    text-align: center;
    height: 80px;
    line-height: 80px;
    margin-top: 30px;

}
.btn{
    margin-right: 30px;
}
</style>

在view页面中新建一个学院(xueyuan) 文件夹,在学院文件夹中新建两个.vue文件(it.vue   wuliu.vue)

it.vue()文件内容

<template>
  <div>
    <div class="main">
      <div class="left">
        <ul>
          <li><button class="btn btn-secondary" @click="tiao2('/xueyuan/it/')">计算机一班</button></li>
          <li><button class="btn btn-secondary"  @click="tiao2('/xueyuan/it/chass02')">计算机二班</button></li>
          <li><button class="btn btn-secondary"  @click="tiao2('/xueyuan/it/chass03')">计算机三班</button></li>
        </ul>
      </div>
      <div class="right">
        <router-view></router-view>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods:{
    tiao2(v){
      this.$router.push(v)
    }
  },
};
</script>
 
<style lang = "less" scoped>
ul{
  list-style: none;
  
}
li{
  margin-top: 40px;
}
</style>

路由页面:router中的index.js  

import vue from 'vue'
import VueRouter from 'vue-router'
vue.use(VueRouter)
const r = new VueRouter({
  mode: 'history',
  routes: [  
    {
      // -------------------------------------------------------
      // 在路由中设置路由和路由对应的页面
      path: "/xueyuan/wuliu",
      component: () => import("../views/xueyuan/wuliu.vue"),
      // ---------------------------------------------------------
      children: [
        {
          path: '/xueyuan/wuliu/',
          component: () => import("../views/wuliu/class01.vue")
        },
        {
          path: '/xueyuan/wuliu/chass02',
          component: () => import("../views/wuliu/class02.vue")
        },
        {
          path: '/xueyuan/wuliu/chass03',
          component: () => import("../views/wuliu/class03.vue")
        },  
      
    ]

    },
    {
           // -------------------------------------------------------
      // 在路由中设置路由和路由对应的页面
      path: "/xueyuan/it",
      component: () => import("../views/xueyuan/it.vue"),
         // ---------------------------------------------------------
      children: [
        {
          path: '/xueyuan/it/',
          component: () => import("../views/it/class01.vue")
        },
        {
          path: '/xueyuan/it/chass02',
          component: () => import("../views/it/class02.vue")
        },
        {
          path: '/xueyuan/it/chass03',
          component: () => import("../views/it/class03.vue")
        },     
    ]

    },
  ]
})

export default r
// 注:下面这个代码是为了重复访问当前页面不报错
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

此时完成了点击不同的学院显示不同学院对应的班级内容

实现点击不同的班级,右 侧显示不同的班级信息

已it.vue页面举个例子

<template>
  <div>
    <div class="main">
      <div class="left">
        <ul>
          <!-- 在it.vue页面中通过按钮的点击事件给tiao2方法传点击后要跳转的路由 -->
          <li><button class="btn btn-secondary" @click="tiao2('/xueyuan/it/')">计算机一班</button></li>
          <li><button class="btn btn-secondary"  @click="tiao2('/xueyuan/it/chass02')">计算机二班</button></li>
          <li><button class="btn btn-secondary"  @click="tiao2('/xueyuan/it/chass03')">计算机三班</button></li>
        </ul>
      </div>
      <div class="right">
        <router-view></router-view>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods:{
    // 2.在方法中通过接收到的路由,跳转到相应的路由,让router-vuew标签中显示相应路由对应的页面
    tiao2(v){
      this.$router.push(v)
    }
  },
};
</script>
 
<style lang = "less" scoped>
ul{
  list-style: none;
  
}
li{
  margin-top: 40px;
}
</style>

在原来的路由中嵌套一组子路由

router中的index页面

import vue from 'vue'
import VueRouter from 'vue-router'
vue.use(VueRouter)
const r = new VueRouter({
  mode: 'history',
  routes: [  
    {
     
      path: "/xueyuan/wuliu",
      component: () => import("../views/xueyuan/wuliu.vue"),
      children: [
        {
    //将此路由设置成和父级路由一样.这样当父级组件显示时,
    //此路由会默认也显示出来,实现第一个班级的信息不用点击,默认显示
          path: '/xueyuan/wuliu/',
          component: () => import("../views/wuliu/class01.vue")
        },
        {
          path: '/xueyuan/wuliu/chass02',
          component: () => import("../views/wuliu/class02.vue")
        },
        {
          path: '/xueyuan/wuliu/chass03',
          component: () => import("../views/wuliu/class03.vue")
        },  
      
    ]

    },
    {

      path: "/xueyuan/it",
      component: () => import("../views/xueyuan/it.vue"),
      // 在子内容中(/xueyuan/it路由页面控制下面的路由显示)嵌套一个子路由数组
      // 案例中为:点击左侧按钮显示的不同班级的信息
      children: [
        {
          path: '/xueyuan/it/',
          component: () => import("../views/it/class01.vue")
        },
        {
          path: '/xueyuan/it/chass02',
          component: () => import("../views/it/class02.vue")
        },
        {
          path: '/xueyuan/it/chass03',
          component: () => import("../views/it/class03.vue")
        },     
    ]

    },
  ]
})

export default r
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

补充每个班级信息的页面,这个页面没啥就是个普通的组件

<template>
  <div>
  


<table class="table">
  <thead class="thead-light">
    <tr>
      <th scope="col">计算机一班</th>
      <th scope="col">First</th>
      <th scope="col">Last</th>
      <th scope="col">Handle</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">1</th>
      <td>Mark</td>
      <td>Otto</td>
      <td>@mdo</td>
    </tr>
    <tr>
      <th scope="row">2</th>
      <td>Jacob</td>
      <td>Thornton</td>
      <td>@fat</td>
    </tr>
    <tr>
      <th scope="row">3</th>
      <td>Larry</td>
      <td>the Bird</td>
      <td>@twitter</td>
    </tr>
    <tr>
      <th scope="row">2</th>
      <td>Jacob</td>
      <td>Thornton</td>
      <td>@fat</td>
    </tr>
    <tr>
      <th scope="row">2</th>
      <td>Jacob</td>
      <td>Thornton</td>
      <td>@fat</td>
    </tr>
  </tbody>
</table>
  </div>
</template>

<script>            
export default {
  data() {
    return {};
  },
};
</script>
 
<style lang = "less" scoped>
</style>

运行后可实现点击左侧的按钮,显示不同班级的信息

组件模块懒加载

router中的index.js文件中:

import vue from 'vue'
import VueRouter from 'vue-router'
vue.use(VueRouter)
const r = new VueRouter({
  mode: 'history',
  routes: [  
    {
     
      path: "/xueyuan/wuliu",
      component: () => import("../views/xueyuan/wuliu.vue"),
      children: [
        {
          path: '/xueyuan/wuliu/',
          component: () => import("../views/wuliu/class01.vue")
        },
        {
          // ------------------------------------------------------------------------------------------------
          path: '/xueyuan/wuliu/chass02',
          // 1.我们可以用图片懒加载的方式(箭头函数的方式)来代替import引入的方式
          component: () => import("../views/wuliu/class02.vue")
        },
        {
          path: '/xueyuan/wuliu/chass03',
          // 2.在文件路径之前加入 加入自定义命名的方式,可修改文件名,具体看图
          component: () => import(/*webpackChunkName:"xueyuanWuliuChass03"*/"../views/wuliu/class03.vue")
        },  
        // -----------------------------------------------------------------------------------------------
      
    ]

    },
    {

      path: "/xueyuan/it",
      component: () => import("../views/xueyuan/it.vue"),
      children: [
        {
          path: '/xueyuan/it/',
          component: () => import("../views/it/class01.vue")
        },
        {
          path: '/xueyuan/it/chass02',
          component: () => import("../views/it/class02.vue")
        },
        {
          path: '/xueyuan/it/chass03',
          component: () => import("../views/it/class03.vue")
        },     
    ]

    },
  ]
})

export default r
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

 2.运行结果

bootstrap的引入

1.先按contrl+c 将结束程序的运行,然后输入C:\Users\emma\Desktop\class\project>npm i bootstrap -S

在main.js文件中输入:import "bootstrap/dist/css/bootstrap.css",就可以在任何页面中使用了,注意使用时的版本要和 下载的版本保持一致.超过测试默认安装的bootstrap用 4版本好使

创建完成项目中下载vue-router  

在项目所在的目录中输入:

npm install vue-router

 

 2.此时打开项目在vscode中还是不能看到rorter文件

3.直接在doc命令窗口中输入:

vue add router

4.安装过程汇中有任何问题,输入yes即可 

5.再次运行,后打开查看vscode    发现和之前安装了router一样,运行结果也一样

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值