假装很重要:才写博客不久,自己写的难免思维比较混沌,所以大家提提意见,可以评论,也可以留联系方式一起进步。

    我们这里只是第一步使用router,最简单的一步先踏出去,不涉及动态路由、嵌套路由的使用。    

    刚听到路由的时候,只能大概知道可能这是与路径和目标有关。

    正确的来说,在web开发中,路由是指根据url分配到对应的处理程序。在我看来路由就像是指路牌,在这个url中('http://blog.csdn.net/qq_34131399/article/details/79393260'),我们可以将‘/***’这样的组合看成是我们站在一个有多个方向的路口,具体的如"/article"就是指我们去article的路牌。我们要到目的地要通过多个需要选择的路口,我们走的这一路,将经过的路牌串起来,就是url了。所以为了让我们的程序按照我们规划的路线行进,我们就要用到路由。

    这里的路由比起计算机其他方面的路由要简单得多,就是起到对页面组合替换进行源头到目的地的引导作用,就像a标签一样,你点了我,我就带你去指定的地方。

   vue中引用路由,我们要在创建项目时点选‘需要vue-router’,也可以后来再安装‘vue-router’,使用npm install vue-router进行安装。


    这里说一下router的三个容易混淆的概念:

    首先先看一下官方给的代码:

// 0. 如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)

// 1. 定义(路由)组件。
// 可以从其他文件 import 进来
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }

// 2. 定义路由
// 每个路由应该映射一个组件。 其中"component" 可以是
// 通过 Vue.extend() 创建的组件构造器,
// 或者,只是一个组件配置对象。
// 我们晚点再讨论嵌套路由。
const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]

// 3. 创建 router 实例,然后传 `routes` 配置
// 你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({
  routes // (缩写)相当于 routes: routes
})

// 4. 创建和挂载根实例。
// 记得要通过 router 配置参数注入路由,
// 从而让整个应用都有路由功能
const app = new Vue({
  router
}).$mount('#app')

// 现在,应用已经启动了!

    上边有三个长的很像的,分别是router、route、routes,初学很容易就会看混淆。


    route:上边示例没有给出但是它是routes的单数形式,就是代表一个指路牌,有一个名字和指向的组件,like this ->{path:'/***',component:***}。

    routes:它的后边有个s,所以它就要高级一点,是route的复数形式,是一个route组成的数组,包含一组route。

    router:router是一个VueRouter的对象,用来管理路由,所以它内部肯定会有routes属性,还有其他的属性和方法。


    当我们要使用时,我们只需要配好路由,把每一个需要的路由配置好,然后将路由挂载到根实例上全局就都可以使用了。

    我用vue-cli创建的vue项目,里边就有个完整的vue并且带上路由的结构。


箭头所指就是路由管理的地方。我通常都是把所有的路由配到这里,这样统一管理也比较直观。

写了几个简单的,这里的组件都是.vue文件的组件。

import Vue from 'vue'
import Router from 'vue-router'
//引入.vue组件
import FindBack from '@/components/FindBack'
import AboutUs from '@/components/AboutUs'
import NearbyThing from '@/components/NearbyThing'
import FullForm from '@/components/FullForm'




Vue.use(Router)//声明使用Router

export default new Router({
  routes: [
    {
      path: '/',
      redirect:'/a',//重定向
      name: 'FindBack',
      component: FindBack
    },
    {
      path: '/a',
      name: 'FindBack',
      component: FindBack
    },
    {
      path: '/c',
      name: 'AboutUs',
      component: AboutUs
    },
    {
      path: '/b',
      name: 'NearbyThing',
      component: NearbyThing
    }
  ]
})

因为在main.js文件中已经引入,所以我们就可以直接全局使用了。

使用有两种方法一种是类似a标签的使用,一种是用函数来使用。

1.标签式使用方法

<router-view></router-view> //这里先预留一个坑

<router-link to="/bar">Go to Bar</router-link>//当我们在页面上点击‘Go to Bar’时就将指向的组件填到页面上的坑里

2.函数式(编程式)使用方法

// 字符串 这里的字符串就是url的一个组成部分 比如'/****'
router.push('home')

// 对象
router.push({ path: 'home' })

// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})

// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

我觉得对于初学者来说,先不考虑后边三种使用方式。不过记得在使用时,我们要import你管理router的js文件。


现在我们来串一串流程:

管理路由的js文件

import Vue from 'vue'
import Router from 'vue-router'

import FindBack from '@/components/FindBack'//一下几个import都是引入.vue的组件文件
import AboutUs from '@/components/AboutUs'
import NearbyThing from '@/components/NearbyThing'
import FullForm from '@/components/FullForm'

Vue.use(Router)//向vue说明 我们要使用路由

export default new Router({
  routes: [
    {
      path: '/',
      redirect:'/a',//匹配到这个字符串时我们重定向到'/a'这里来,也就是重新指向一个路由
      name: 'FindBack',
      component: FindBack
    },
    {
      path: '/a',
      name: 'FindBack',
      component: FindBack
    },
    {
      path: '/c',
      name: 'AboutUs',
      component: AboutUs
    },
    {
      path: '/b',
      name: 'NearbyThing',
      component: NearbyThing
    }
  ]
})

使用路由页面:

<template>
    <div id="app">
        <router-view v-on:nearbything_="changeBButtomStage"></router-view>

        <!-- 这里带参数调用函数 不同参数就匹配不同的路由 -->
        <button v-on:click='chooseMe(1)'>1</button>
        <button v-on:click='chooseMe(2)'>1</button>
        <button v-on:click='chooseMe(3)'>1</button>
    </div>
</template>
<script>
import router from "./router";//引入管理router的js文件
export default {
    data() {
        return {}
    },
    methods: {
        // 根据选择的按钮进行页面跳转 或者 按钮颜色变换
        chooseMe: function(i) {
            switch (i) {//判断选择哪一个路由 
                case 1:
                    router.push("/a");
                    break;
                case 2:
                    router.push("/b");
                    break;
                case 3:
                    router.push("/c");
                    break;
            }
        }
    }
</script>

另外还有其他的组件文件,选择不同路由就将不同的组件塞入预留的坑里。


Logo

前往低代码交流专区

更多推荐