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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容

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