Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 730|回复: 0

[默认分类] Vue 爬坑之路(三)—— 使用 vue-router 跳转页面

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-21 12:45:02 | 显示全部楼层 |阅读模式
    使用 vue.js 做项目的时候,一个页面是由多个组件构成的,所以在跳转页面的时候,并不适合用传统的 href,于是 vue-router 应运而生。
    官方文档: https://router.vuejs.org/zh-cn/essentials/getting-started.html
      
    有很多朋友找我要 demo,但是博客中的这个案例被我删掉了,我只好随手写了一个超简单的 demo,希望能有所帮助
    链接: https://pan.baidu.com/s/1pMfi5tD  密码: pjwx
      
    这次的实例主要实现下图的效果:

      
    项目结构:

      
      
    一、配置 Router
    用 vue-cli 创建的初始模板里面,并没有 vue-router,需要通过 npm 安装

    1. cnpm i vue-router -D
    复制代码


    安装完成后,在 src 文件夹下,创建一个 routers.js 文件,和 main.js 平级
    然后在 router.js 中引入所需的组件,创建 routers 对象

    1. import Home from "./components/home.vue"
    2. const routers = [
    3.   {
    4.     path: "/home",
    5.     name: "home",
    6.     component: Home
    7.   },
    8.   {
    9.     path: "/", component: Home },
    复制代码

    1. ]
    2. export default routers
    复制代码


    在创建的 routers 对象中, path 配置了路由的路径,component 配置了映射的组件
    需要注意的是,export default routers 必须写在文件底部,而且后面还需要接一空行,否则无法通过 ESlint 语法验证
      
    然后 main.js 也需要修改:

    1. import Vue from "vue"
    2. import VueRouter from "vue-router"
    3. import routers from "./routers"
    4. import App from "./App"
    5. Vue.use(VueRouter)
    6. const router = new VueRouter({
    7.   mode: "history",
    8.   routes: routers
    9. })
    10. new Vue({
    11.   el: "#app",
    12.   router,
    13.   render: h => h(App)
    14. })
    复制代码


    在创建的 router 对象中,如果不配置 mode,就会使用默认的 hash 模式,该模式下会将路径格式化为 #! 开头。
    添加 mode: "history" 之后将使用 HTML5 history 模式,该模式下没有 # 前缀,而且可以使用 pushState 和 replaceState 来管理记录。
    关于 HTML5 history 模式的更多内容,可以参考官方文档:https://router.vuejs.org/zh-cn/essentials/history-mode.html
      
      
    二、嵌套路由

    在这个实例中,为了加深项目层级,App.vue 只是作为一个存放组件的容器:

    其中 <router-view> 是用来渲染通过路由映射过来的组件,当路径更改时,<router-view> 中的内容也会发生更改
    上面已经配置了两个路由,当打开 http://localhost:8080 或者 http://localhost:8080/home 的时候,就会在 <router-view> 中渲染 home.vue 组件
      
    home.vue 是真正的父组件,first.vue、login.vue 等子组件都会渲染到 home.vue 中的 <router-view>

      
    如此一来,就需要在一级路由中嵌套二级路由,修改 routers.js

    1. import Home from "./components/home.vue"
    2. import First from "./components/children/first.vue"
    3. import Login from "./components/children/login.vue"
    4. const routers = [
    5.   {
    6.     path: "/",
    7.     component: Home,
    8.    [b]children: [
    9.    {
    10.     path: [/b][b]"/",
    11.     component: Login
    12.    }
    13.   [/b][b]][/b]
    14.   },
    15.   {
    16.     path: "/home",
    17.     name: "home",
    18.     component: Home,
    19.    [b] children: [ { path: [/b][b]"/", name: "login", component: Login }, { path: "first", name: "first"[/b][b], component: First } ][/b]
    20.   }
    21. ]
    22. export default routers
    复制代码


    在配置的路由后面,添加 children,并在 children 中添加二级路由,就能实现路由嵌套
    配置 path 的时候,以 " / " 开头的嵌套路径会被当作根路径,所以子路由的 path 不需要添加 " / "
      
      
    三、使用 <router-link> 映射路由

    home.vue 中引入了 header.vue 组件,其中含有导航菜单
    当点击导航菜单的时候,会切换 home.vue 中 <router-view> 中的内容
    这种只需要跳转页面,不需要添加验证方法的情况,可以使用 <router-link> 来实现导航的功能:

    在编译之后,<router-link> 会被渲染为 <a> 标签, to 会被渲染为 href,当 <router-link> 被点击的时候,url 会发生相应的改变
    如果使用 v-bind 指令,还可以在 to 后面接变量,配合 v-for 指令可以渲染导航菜单
      
    如果对于所有 ID 各不相同的用户,都要使用 home 组件来渲染,可以在 routers.js 中添加动态参数

    1. {
    2.     path: "/home/[b]:id[/b]",
    3.     component: Home
    4. }
    复制代码


    这样 "/home/user01"、"/home/user02"、"/home/user03" 等路由,都会映射到 Home 组件
    然后还可以使用 $route.params.id 来获取到对应的 id
      
      
    四、编程式导航

    实际情况下,有很多按钮在执行跳转之前,还会执行一系列方法,这时可以使用 this.$router.push(location) 来修改 url,完成跳转

      
    push 后面可以是对象,也可以是字符串:

    1. // 字符串
    2. this.$router.push("/home/first")
    3. // 对象
    4. this.$router.push({ path: "/home/first" })
    5. // 命名的路由
    6. this.$router.push({ name: "home", params: { userId: wise }})
    复制代码


      
      
    五、前车之鉴
    在学习的过程中,遇到一个困扰许久的问题,大概是从 first 组件跳转回 login 之后,无法再跳转回去。但是 url 已经被修改,刷新页面也能正常显示。

    这是因为我在 first.vue 组件中的 data 里面没有写 return

    在 vue 组件中,data 必须写为函数,且需要用 return 来返回参数。但是当 data 为空时,即使不写 return 也不会报错,所以导致了上面的问题。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-18 08:45 , Processed in 0.371126 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表