一篇超详细的Vue-Router手把手教程

一篇超详细的Vue-Router手把手教程

简介

Vue-Router是Vue.js官方提供的用于路由管理的插件,可以帮助我们快速地构建单页应用。本文将从基础的使用开始,逐步深入解析Vue-Router的特性和使用方法,让你轻松掌握Vue-Router的使用。

基本使用

安装

使用npm安装Vue-Router:

npm install vue-router

使用

在Vue项目的主文件(通常是main.js)中导入Vue和Vue-Router并使用:

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    {
      path: '/',
      component: Home
    },
    {
      path: '/about',
      component: About
    }
  ]
})

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

其中,routes是一个路由配置数组,每个对象都描述了一个页面的路由信息。在上面的示例中,我们定义了两个路由:'/'和'/about',分别对应两个页面。

路由配置对象包含以下属性:

  • path:指定路由的路径,可以是动态路径。
  • component:指定路由对应的组件。

页面跳转

在Vue组件中使用<router-link>标签来实现页面跳转:

<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>

to属性指定了跳转的目标路由的路径。

同时,在路由对应的组件中使用<router-view>来指定路由匹配到的页面组件的位置:

<router-view></router-view>

嵌套路由

Vue-Router支持嵌套路由,即在一个页面中再嵌套子页面的路由配置。例如,我们可以在'/'路由对应的Home组件中添加嵌套的About页面:

const router = new VueRouter({
  routes: [
    {
      path: '/',
      component: Home,
      children: [
        {
          path: 'about',
          component: About
        }
      ]
    }
  ]
})

这里我们使用了children属性来定义子路由。注意,子路由的路径前不需要加'/'。

在Home组件中,我们需要添加<router-view>来指定子路由匹配到的组件的位置:

<router-view></router-view>

动态路由

有时候需要定义动态路由,即路由路径中包含参数。例如,我们可以定义一个动态参数'/:id',然后在路由对应的组件中使用$route.params来获取参数的值:

const router = new VueRouter({
  routes: [
    {
      path: '/user/:id',
      component: User
    }
  ]
})

export default {
  name: 'User',
  data () {
    return {
      userId: null
    }
  },
  created () {
    this.userId = this.$route.params.id
  }
}

重定向和别名

重定向可以指定一个路由在匹配到路径时,自动跳转到另外一个路由,可以使用redirect属性:

const router = new VueRouter({
  routes: [
    {
      path: '/home',
      component: Home
    },
    {
      path: '/',
      redirect: '/home'
    }
  ]
})

别名可以让一个路由指定多个路径,可以使用alias属性:

const router = new VueRouter({
  routes: [
    {
      path: '/home',
      component: Home,
      alias: '/index'
    }
  ]
})

导航守卫

Vue-Router提供了导航守卫,可以在路由发生变化前后执行一些逻辑。例如,我们可以在路由切换前检查用户是否已经登录:

const router = new VueRouter({
  routes: [
    {
      path: '/',
      component: Home
    },
    {
      path: '/login',
      component: Login
    }
  ]
})

router.beforeEach((to, from, next) => {
  const isLogin = sessionStorage.getItem('user')
  if (to.path === '/login') {
    if (isLogin) {
      next('/')
    } else {
      next()
    }
  } else {
    if (isLogin) {
      next()
    } else {
      next('/login')
    }
  }
})

这里使用了beforeEach函数来添加一个全局的导航守卫。在跳转任何路由时,都会执行该导航守卫中的逻辑。

高级使用

路由参数

路由参数可以通过$route.params来访问,例如'/user/:id'路由中的':id'对应的参数可以通过$this.$route.params.id来访问。

路由元信息

有时候需要在路由中添加一些可选的元信息,例如要求用户在登录后才能访问某个页面。可以使用meta属性来实现:

const router = new VueRouter({
  routes: [
    {
      path: '/home',
      component: Home
    },
    {
      path: '/login',
      component: Login
    },
    {
      path: '/user',
      component: User,
      meta: {
        requiresAuth: true
      }
    },
  ]
})

router.beforeEach((to, from, next) => {
  const isLogin = sessionStorage.getItem('user')
  if (to.meta.requiresAuth && !isLogin) {
    next('/login')
  } else {
    next()
  }
})

这里我们定义了一个路由'/user',并且在meta属性中添加了一个需求登录后才能访问的属性'requiresAuth'。在导航守卫中,我们检查了该属性,如果需要登录且未登录,就跳转到登录页面。

路由懒加载

如果我们的应用需要显示很多页面,可能会导致应用初始化耗时很长。Vue-Router提供了路由懒加载的机制,可以将页面组件按需加载,提高应用的启动速度和性能。

使用路由懒加载需要使用Webpack的代码分割特性,把组件代码分割成不同的块,然后在路由访问时动态加载这些块。

const router = new VueRouter({
  routes: [
    {
      path: '/home',
      component: () => import('./components/Home.vue')
    }
  ]
})

这里我们使用了箭头函数和import()语法,来定义Home组件的懒加载方式。

路由模式

Vue-Router支持两种路由模式:hash模式和history模式。默认为hash模式。

hash模式使用URL中的'#'部分来作为路由,不会触发浏览器刷新。history模式使用HTML5的history API来管理路由,可以使用正常的URL路径,但需要服务器的支持。

可以在创建router实例时设置mode属性来切换路由模式:

const router = new VueRouter({
  mode: 'history',
  routes: [
    ...
  ]
})

示例说明

示例1:构建一个TodoMVC应用

首先,我们创建一个Vue项目,并安装Vue-Router:

vue create todo-app
cd todo-app
npm install vue-router

然后,我们在src目录下创建一个router.js文件,定义路由配置:

import Vue from 'vue'
import VueRouter from 'vue-router'
import TodoList from './views/TodoList.vue'

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    {
      path: '/',
      name: 'home',
      component: TodoList
    }
  ]
})

export default router

在App.vue中添加<router-view>组件:

<template>
  <div id="app">
    <router-view />
  </div>
</template>

在main.js中导入router和App.vue,并将router引用到Vue实例中:

import Vue from 'vue'
import App from './App.vue'
import router from './router'

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

现在我们的应用已经可以使用路由了,可以通过根路径'/'来访问TodoList组件。

接下来,我们在TodoList.vue中添加导航链接,用于实现路由切换:

<template>
  <div>
    <nav>
      <router-link to="/active">Active</router-link>
      <router-link to="/completed">Completed</router-link>
    </nav>
    ...
  </div>
</template>

然后,我们修改router.js中的路由配置,来添加'/active'和'/completed'的路由:

import Vue from 'vue'
import VueRouter from 'vue-router'
import TodoList from './views/TodoList.vue'
import ActiveTodos from './views/ActiveTodos.vue'
import CompletedTodos from './views/CompletedTodos.vue'

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    {
      path: '/',
      name: 'home',
      component: TodoList
    },
    {
      path: '/active',
      name: 'active',
      component: ActiveTodos
    },
    {
      path: '/completed',
      name: 'completed',
      component: CompletedTodos
    }
  ]
})

export default router

这样我们就完成了一个简单的TodoMVC应用的构建。

示例2:使用路由参数和嵌套路由

我们可以使用路由参数来实现动态路由,下面是一个简单的示例。我们在router.js中添加一个动态路由:

import Vue from 'vue'
import VueRouter from 'vue-router'
import User from './views/User.vue'

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    {
      path: '/',
      name: 'home',
      component: TodoList
    },
    {
      path: '/user/:id',
      name: 'user',
      component: User
    }
  ]
})

export default router

在User.vue中,我们使用$route.params来获取路由参数:

<template>
  <div>
    User Id: {{ userId }}
  </div>
</template>

<script>
export default {
  name: 'User',
  data () {
    return {
      userId: null
    }
  },
  created () {
    this.userId = this.$route.params.id
  }
}
</script>

我们还可以在'/user/:id'的路由下添加子路由,例如一个文章列表:

import Vue from 'vue'
import VueRouter from 'vue-router'
import User from './views/User.vue'
import Articles from './views/Articles.vue'

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    {
      path: '/',
      name: 'home',
      component: TodoList
    },
    {
      path: '/user/:id',
      name: 'user',
      component: User,
      children: [
        {
          path: 'articles',
          name: 'user-articles',
          component: Articles
        }
      ]
    }
  ]
})

export default router

这里我们使用了children属性来定义子路由,在User组件中,我们需要添加<router-view>来渲染子路由的组件。

结语

本文详细介绍了Vue-Router的使用方法和特性,包括基础的路由配置和页面跳转,以及高级的路由参数、导航守卫、懒加载和路由模式等。希望本文可以帮助你轻松掌握Vue-Router的使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇超详细的Vue-Router手把手教程 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vant 时间选择器–开始时间和结束时间实例

    vant 时间选择器是一个基于Vue.js的组件库,其中包含了常用的时间选择器组件。下面就详细讲解vant 时间选择器的开始时间和结束时间实例的攻略。 一、引入组件 在使用 vant 时间选择器组件之前,需要先在项目中引入这个组件库。 <!– 引入样式文件 –> <link rel="stylesheet" href…

    Vue 2023年5月29日
    00
  • vue3.0 CLI – 2.6 – 组件的复用入门教程

    下面我将详细讲解“vue3.0 CLI – 2.6 – 组件的复用入门教程”的完整攻略。 1. 什么是组件? 在 Vue 中,组件是一种可复用的、独立的模块,用于封装相关的 HTML、CSS 和 JavaScript。组件的出现可以让 Web 应用程序更轻松地维护和扩展。 2. 组件的创建 在 Vue 中,用 Vue.component 方法来创建组件。例如…

    Vue 2023年5月27日
    00
  • vue实现自定义公共组件及提取公共的方法

    下面我为您详细讲解“Vue 实现自定义公共组件及提取公共的方法”的完整攻略。 1. 自定义公共组件 1.1 创建与引入组件 Vue 框架提供了组件化的机制,用户可以通过自定义组件的方式进行开发。下面是一个简单的自定义组件的例子,我们可以创建一个 HelloWorld 组件: <template> <div> <h1>{{ …

    Vue 2023年5月28日
    00
  • springboot如何使用vue打包过的页面资源

    为了方便说明,这里将“springboot如何使用vue打包过的页面资源”分为两大部分:前端资源打包和后端资源引入。下面对这两部分进行详细讲解。 一、前端资源打包 1.1 环境准备 在进行前端资源打包之前,需要先安装vue-cli和项目依赖。具体步骤如下: 安装Node.js和npm(已安装可跳过); 使用npm安装vue-cli: bash npm ins…

    Vue 2023年5月28日
    00
  • vue使用技巧及vue项目中遇到的问题

    Vue使用技巧及Vue项目中遇到的问题攻略 一、技巧篇 1. 路由懒加载 路由懒加载可以大幅提高页面加载速度,特别是对于单页面应用程序。可以将异步组件绑定到动态导航。在用户需要更新或者运行应用程序时,将会调度这个组件。项目越大,使用路由懒加载越有必要。 假设我们有如下代码: import Home from ‘../views/Home.vue’ impor…

    Vue 2023年5月27日
    00
  • vue项目配置sass及引入外部scss文件方式

    为了让答案更加清晰明了,我会按照以下步骤逐一讲解: 安装sass-loader和node-sass 修改配置文件vue.config.js 在vue组件中使用scss 引入外部scss文件 接下来我将详细介绍。 安装sass-loader和node-sass 在使用sass前,我们需要先安装必要的依赖sass-loader和node-sass,可以使用以下命…

    Vue 2023年5月28日
    00
  • Vue中在data里面调用method方法的实现

    在Vue中,我们可以在组件的data选项中定义数据,并且我们可以使用methods来定义方法。通常情况下,我们使用methods中的方法来操作组件数据。但是,有时我们需要在data中调用methods的方法。这时,可以使用this.$options.methods来访问methods中定义的方法。 下面是Vue中在data里面调用method方法的实现的完整…

    Vue 2023年5月28日
    00
  • vue 3.0 使用ref获取dom元素的示例

    使用 ref 获取 DOM 元素是 Vue.js 3.0 新增的功能。下面是使用 ref 获取 DOM 元素的示例: 1. 在模板中使用 ref 在模板中使用 ref 可以方便地获取 DOM 元素及组件实例。下面是一个简单的示例,用于获取一个输入框 (<input>): <template> <div> <input…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部