Vue全家桶---前端路由

本文详细介绍了Vue.js的路由管理器VueRouter,包括基本使用方法,如HTML5历史模式和hash模式,支持的嵌套路由,动态路由匹配以及命名路由的设置。同时,展示了编程式导航的实现,如使用`router.push()`进行路径跳转,并探讨了其参数规则。内容涵盖了SPA应用中路由配置和管理的关键方面。
摘要由CSDN通过智能技术生成

Vue全家桶-前端路由

  1. 路由
    1.1 路由是一个比较广义和抽象的概念,路由的本质就是对应关系
    在开发中分为:后端路由SSR、前端路由SPA
  2. 路由的基本概念和原理
    1.1 Vue Router是Vue.js官方的路由管理器,他和Vue.js的核心深度集成,可以非常方便的用语SPA应用程序的开发。
    1.2 Vue Router包含的功能有:1.支持HTML5历史模式或hash模式2.支持嵌套路由3.支持路由函数4.支持编程式路由5.支持命名路由
  3. 路由的基本使用
   <!-- 被 vm 实例所控制的区域 -->
    <div id="app">
      <router-link to="/user">User</router-link>
      <router-link to="/register">Register</router-link>

      <!-- 路由占位符 -->
      <router-view></router-view>
    </div>

    <script>
      const User = {
        template: '<h1>User 组件</h1>'
      }

      const Register = {
        template: '<h1>Register 组件</h1>'
      }

      // 创建路由实例对象
      const router = new VueRouter({
        // 所有的路由规则
        routes: [
          { path: '/user', component: User },
          { path: '/register', component: Register }
        ]
      })

      // 创建 vm 实例对象
      const vm = new Vue({
        // 指定控制的区域
        el: '#app',
        data: {},
        // 挂载路由实例对象
        // router: router
        router
      })
    </script>
  1. vue-router嵌套路由
  <!-- 被 vm 实例所控制的区域 -->
    <div id="app">
      <router-link to="/user">User</router-link>
      <router-link to="/register">Register</router-link>

      <!-- 路由占位符 -->
      <router-view></router-view>
    </div>

    <script>
      const User = {
        template: '<h1>User 组件</h1>'
      }

      const Register = {
        template: `<div>
          <h1>Register 组件</h1>
          <hr/>

          <!-- 子路由链接 -->
          <router-link to="/register/tab1">tab1</router-link>
          <router-link to="/register/tab2">tab2</router-link>

          <!-- 子路由的占位符 -->
          <router-view />
        <div>`
      }

      const Tab1 = {
        template: '<h3>tab1 子组件</h3>'
      }

      const Tab2 = {
        template: '<h3>tab2 子组件</h3>'
      }

      // 创建路由实例对象
      const router = new VueRouter({
        // 所有的路由规则
        routes: [
          { path: '/', redirect: '/user'},
          { path: '/user', component: User },
          // children 数组表示子路由规则
          { path: '/register', component: Register, children: [
            { path: '/register/tab1', component: Tab1 },
            { path: '/register/tab2', component: Tab2 }
          ] }
        ]
      })

      // 创建 vm 实例对象
      const vm = new Vue({
        // 指定控制的区域
        el: '#app',
        data: {},
        // 挂载路由实例对象
        // router: router
        router
      })
    </script>
  1. vue-router动态路由匹配
var router = new VueRouter({
 routes: [
 // 动态路径参数 以冒号开头
 { path: '/user/:id', component: User }
 ]
})
//*****************************
const User = {
 // 路由组件中通过$route.params获取路由参数
 template: '<div>User {{ $route.params.id }}</div>'
}
const router = new VueRouter({
 routes: [
 // 如果 props 被设置为 true,route.params 将会被设置为组件属性
 { path: '/user/:id', component: User, props: true }
 ]
 })
 //****************************
const User = {
 props: ['id'], // 使用 props 接收路由参数
 template: '<div>用户ID:{{ id }}</div>' // 使用路由参数
 }
const router = new VueRouter({
 routes: [
 // 如果 props 是一个对象,它会被按原样设置为组件属性
 { path: '/user/:id', component: User, props: { uname: 'lisi', age: 12 }}
 ]
 })
 //*******************************************
const User = {
 props: ['uname', 'age'],
 template:<div>用户信息:{{ uname + '---' + age}}</div>'
 }
const router = new VueRouter({
 routes: [
 // 如果 props 是一个函数,则这个函数接收 route 对象为自己的形参
 { path: '/user/:id', 
 component: User, 
 props: route => ({ uname: 'zs', age: 20, id: route.params.id })}
 ]
 })
 //*********************************************
const User = {
 props: ['uname', 'age', 'id'],
 template:<div>用户信息:{{ uname + '---' + age + '---' + id}}</div>'
 }
  1. vue-router命名路由
    为了更加方便的表示路由的路径,可以给路由规则起一个别名,即为“命名路由”。
 //设置路由规则
 const router = new VueRouter({
 routes: [
 {
 path: '/user/:id',
 name: 'user',
 component: User
 }
 ]
 })
 //****************************************
//查询参数
  <router-link :to="{ name: 'user', params: { id: 123 }}">User</router-link>
 router.push({ name: 'user', params: { id: 123 }})
  1. vue-router编程式导航
    1.1 声明式导航:通过点击链接实现导航的方式,叫做声明式导航
    例如:普通网页中的 链接 或 vue 中的
    1.2 编程式导航:通过调用JavaScript形式的API实现导航的方式,叫做编程式导航
    例如:普通网页中的 location.href
/*常用的编程式导航API
this.$router.push('hash地址') 
this.$router.go(n)*/
const User = {
 template: '<div><button @click="goRegister">跳转到注册页面</button></div>',
 methods: {
 goRegister: function(){
 // 用编程的方式控制路由跳转
 this.$router.push('/register');
 }
 }
 }
  1. router.push() 方法的参数规则
 // 字符串(路径名称)
 router.push('/home')
 // 对象
 router.push({ path: '/home' })
 // 命名的路由(传递参数)
 router.push({ name: '/user', params: { userId: 123 }})
 // 带查询参数,变成 /register?uname=lisi
 router.push({ path: '/register', query: { uname: 'lisi' }})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值