Vue方向:Vue-Router路由

路由介绍


Vue router是 Vue.js的官方路由管理器,用于构建单页面项目,在安装Vue-cli时,选择router即可安装,期间有一个是否启用history选项,可以先选择no,也就是hash模式,可以在配置中更改成history模式,安装后,npm run serve启动项目,会发现link,单页面链接,在hash模式下,链接地址前会有#号,改成history模式则没有#号

更改模式在:src/router/index.js里,设置options:

const router = new  VueRouter({

      mode  : 'history',        //默认mode : 'hash'

      routers

})

PS: 设置history模式,需要服务器环境配置的支持,手册已经给出各个服务的解决方案

PS:地址为:https://router.vuejs.org/zh/guide/essentials/history.mode.html


使用路由


安装了router路由的脚手架,多了两个目录,且配置和入口文件也发生了改变,先来分析下入口文件main.js,比之前多了引入和注册路由的内容;

引入路由

import  router  from  './router'

     new Vue({

      //注册路由

            router,

            ....

})

分析App.vue中路由的各种元素,搭配router/index.js

router-link标签

<router-link  to='/'>Home</router-link>

<router-link  to='/about'>About</router-link>

PS:  1. <router-link>是组件导航,会被渲染成<a>超链接标签

        2. to属性是链接地址,会被渲染成href属性

const  routers = [

           {

                path : '/',

                name: 'Home',

                component: Home

           },

          {

                path: '/about',

                name: 'About',

                component: () => import('../views/About.vue')

            }

 ]

<router-link>对于的index.js部分,

//引入Vue.jsimport  Vue  from  'vue'

//引入vue-router.jsimport  VueRouter  from  'vue-router'

//引入Home组件import  Home  from  '../views/Home.vue'

参数是一个插件,路由就是一个插件

初始化这个插件以便使用

Vue.use(VueRouter)

这个常量用于设置每个组件的信息,然后交给路由插件注册

const  routers = [

               {

                       path: '/', //链接地址

                       name: 'Home', //别名

                       component: Home  //加载的组件

                }, 

               {

                       path: '/about', 

                       name: 'about', //另外一种组件加载模式,路由懒加载,

                       component: () => import('../views/About.vue')

               }

]

实例化路由组件

    const router = new VueRouter({

        mode: 'hash',  //默认mode : 'hash'

        routers

    })

 导出路由

    export  default  router

回到App.vue, 导航链接下方有一个空标签<router-view/>

<router-view/>渲染view目录下的页面组件,而components是功能性小组件


动态路由设置


所谓动态路由匹配:就是不确定的参数进行路由映射到同一组件上去,比如经典的:user?id: 5, 这个5就是动态的数值,最终路径:user/5

模式 匹配路径 $router.params

顺带说下vue-router传参的两种方式的区别(query和params)

       query类似get请求,页面跳转后,会在地址栏上显示请求的参数

       而 params 类似post请求,页面跳转后,地址栏上不会显示请求的参数信息

1. query传参的方式以及去接收参数

    传参:

     this.$router.push ({  

                           path: '/list',

                           query: {

                                  id: id

                            }

                      })

     接收参数:

     this.$route.query.id

2. params传参的方式以及去接收参数

     传参:

      this.$router.push({

                              name: 'list',    //params里面只能是这种格式,不能是path:'/list'这种形式,因为params只能通过name来引入路由。

                              params: {

                                       id: id

                               }

                       })

      接收参数:

      this.$router.params.id


/user/:id /user/5 { id : 5 }

/user/:id/post/:name /user/5/post/lee { id : 5, post : 'lee' }

创建user页面组件后,先采用query模式:user ? id = 5 ;

<template>

    <h3>

        User Id : {{$router.query.id}}

    </h3>

</template>

如果要使用动态路由,先需要在path里配置相关路由规则,然后再获取;

{

        path : '/user/:id',

        name: 'User',

        component : User

},

<template>

    <h3>

        User Id : {{ $router.params.id }}

    </h3>

</template>

PS:  $route对象的相关属性

创建两个不同参数但同一组件调用的链接,方便来回点击调试

<router-link to="/user/5">user/5</router-link>

<router-link to="/user/6">user/6</router-link>

由于动态路由访问的都是同一组件不同参数,组件会被复用以提升效率,可以通过watch监听对象,来监听$router(to,from)判断去处和来源;

有时路由不存在会得不到任何结果,可以设置捕获所有路由或404

{

    path: '*',

    name: 'Home',

    component: Home

},

{

    path: '/user-*',

    name: 'Home',

    component: Home

}

在App.vue中,创建script,来监听动态路由的变化;

<script>

    export default {

        watch : {

            $route(to,from) {

                console.log(to)

                console.log(from)

            }

        }

    }

</script>


嵌套路由的使用


嵌套路由的三种匹配方式,第一种是固定路由,二三种是两种动态路由:

模式 匹配路径

/news/music /news/music

/user/:id/profile /user/5/profile

/user/:id/posts /user/5/posts

可以在views目录下创建user目录,并分别创建UserProfile和UserPosts:

<template>

    <h3>

        UserProfile: {{ $route.params.id }}

    </h3>

</template>

<template>

    <h3>

        UserPosts: {{ $route.params.id }}

    </h3>

</template>

在route/index.js配置路由规则,在User组件中配置子路由

{

       path: '/user/:id',

       name: 'User',

       component: User,

   children : [

          {

               path : 'profile',

               component: UserProfile

          },

          {

                path :  'posts',

                component: UserPosts

          }

     ]

}

注: 组件名称和路径设置的不一样,路由采用的是路径

子路由不需要 /  ,  因为斜杠会被当成根路径

在User.vue 这个父路由,需要使用视图渲染加载子路由:

<template>

    <div>

        <h3>

            User  Id  :  {{ $route.params.id }}

        </h3>

    </div>

</template>

注:<router-view>外层需要有一个元素标签,否则会报错

如果父路由,遇到没有可渲染的子路由,可以设置一个空路由

{

      path : '*',

      component : List

}

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

推荐阅读更多精彩内容