Vue Router 使用实例

在对Vue Router不熟练的情况下,很容易走弯路,过后才会发现原来还有捷径。我的原则是一个变量能解决的问题绝对不会用两个,如果不用自己定义变量是最好的。

下面是核心用法的总结,这个实例包含了以下这些知识点 (非完整实例,未给出无关的代码)

  • 懒加载组件的通用函数
  • 路径重定向
  • 子组件
  • 父组件的根路径组件
  • 组件的 key 属性
  • 解决带 params 路径跳转,页面不刷新的问题
  • 自定义 404 页面
  • 用数组初始化菜单
  • 根据当前网址 Path,将匹配的菜单项修改为激活状态

src/router.js

项目中直接使用了path跳转,所有未指定name属性

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

Vue.use(Router)

// 实现“懒加载组件”的通用函数
function component(comp) {
  return () =>
    import(/* webpackChunkName: "comp-[request]" */ `@/components/${comp}`)
}

function view(comp) {
  return () =>
    import(/* webpackChunkName: "view-[request]" */ `@/view/${comp}`)
}

export default new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes: [
    {
      path: '/login',
      component: loadComponent('Login')
    },
    {
      // '/home' 重定向到 `/`
      path: '/home',
      redirect: '/'
    },
    {
      path: '/',
      component: view('Home'),
      children: [
        {
          // 关联 `/` 根路径的组件
          path: '/',
          component: component('Main')
        },
        {
          // 关联 `/profile` 路径的子组件
          path: '/profile',
          component: component('home/Profile')
        },
        {
          // 关联 `/hero/{英雄ID}` 带params路径的组件
          path: '/hero/:heroId',
          component: component('Hero')
        }
      ]
    },
    {
      path: '/about',
      component: view('About')
    },
    {
      // 自定义 404 页面,否则会打开默认界面
      path: '*',
      component: view('NotFound')
    }
  ]
})

src/App.vue

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

src/components/Home.vue

组件的key属性可以唯一标记组件,如果不指定 ,不同的path指向同一个component,vue 会直接重用这个组件,而不会重新触发created()

<template>
  <div class="home">
    <div class="header">
      <ul>
        <!-- 遍历数组初始化菜单 -->
        <!-- 匹配当前path的菜单项,样式修改为 'menu-active' -->
        <li
          v-for="(item, index) in menus"
          :key="index"
          :class="item.path == $route.path? 'menu-active': 'menu'"
          @click="onClick(item)"
        >
          {{ item.title }}
        </li>
      </ul>
    </div>
    <div class="main">
      <!-- 用path绑定组件的Key,解决带params路径跳转,页面不刷新的问题 -->
      <router-view :key="$route.path"></router-view>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        menus: [
          {
            title: '首页',
            path: '/'
          },
          {
            title: '关于',
            path: '/about'
          }
        ]
      }
    },
    methods: {
      onClick(item) {
        this.$router.push(item.path)
      }
    }
  }
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # 传智播客vue 学习## 1. 什么是 Vue.js* Vue 开发手机 APP 需要借助于 Weex* Vu...
    再见天才阅读 9,013评论 0 6
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,712评论 0 17
  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 12,007评论 0 25
  • VUE Vue :数据驱动的M V Vm框架 m :model(后台提供数据),v :view(页面),vM(模板...
    wudongyu阅读 10,752评论 0 11
  • 1路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示home的内容,如果点击页面上的abou...
    你好陌生人丶阅读 5,552评论 0 6