官网地址:https://router.vuejs.org/zh/

先来个自我介绍吧,我就是你们口中的路由,我的作用就是告诉你们怎么到达某地,比如你想去一个地方(前提是这个地方是已经存在的)我会查询我的路线图(路由配置)告诉你怎么过去。明白了吧,我的作用就是给你们导航的,有了我的存在,你们不用在详细的记住每一条路线图,只需要记住要去的目的地名字就行了,至于怎么过去,那是我的事,你就不用操心了,完全按照我的指示就能又快有准的到达目的地。

对了,我还有三个助手,他们分别是:

1.router :这位是我的指令官,他管理着所有的 route,当你需要指路时,他会召集所有的route,到routes集合,然后一个一个询问谁知道路线,直到找到那个route。如果找到了那个知道路线的route,router就派出他去为你导航,直至把你送到目的地。

2.routes:所有的路线route都在这里存放。

3.route:看名字也知道我是单数了,能力有限,我只能存放一条路线图。

认识了我的三位助手,对我也有个简单的认识了,下面进入实操环节。

--------分割线-----------

一:vue-router 初级应用

最终期望:在首页中点击对应的连接进入对应的组件。

在 components中新建三个组件 分别是:A、B、C

A:

  1. <template>
  2. <div class="hello">
  3. <ul>
  4. <li>
  5. {{name}}
  6. </li>
  7. </ul>
  8. </div>
  9. </template>
  10. <script>
  11. export default {
  12. name: 'HelloWorld',
  13. data () {
  14. return {
  15. name: 'my name is A'
  16. }
  17. }
  18. }
  19. </script>
  20. <!-- Add "scoped" attribute to limit CSS to this component only -->
  21. <style scoped>
  22. </style>

B:

  1. <template>
  2. <div class="hello">
  3. <ul>
  4. <li>
  5. {{name}}
  6. </li>
  7. </ul>
  8. </div>
  9. </template>
  10. <script>
  11. export default {
  12. name: 'HelloWorld',
  13. data () {
  14. return {
  15. name: 'my name is B!'
  16. }
  17. }
  18. }
  19. </script>
  20. <!-- Add "scoped" attribute to limit CSS to this component only -->
  21. <style scoped>
  22. h1, h2 {
  23. font-weight: normal;
  24. }
  25. ul {
  26. list-style-type: none;
  27. padding: 0;
  28. }
  29. li {
  30. display: inline-block;
  31. margin: 0 10px;
  32. }
  33. a {
  34. color: #42b983;
  35. }
  36. </style>

C:

  1. <template>
  2. <div class="hello">
  3. <ul>
  4. <li>
  5. {{name}}
  6. </li>
  7. </ul>
  8. </div>
  9. </template>
  10. <script>
  11. export default {
  12. name: 'HelloWorld',
  13. data () {
  14. return {
  15. name: 'my name is C!'
  16. }
  17. }
  18. }
  19. </script>
  20. <!-- Add "scoped" attribute to limit CSS to this component only -->
  21. <style scoped>
  22. h1, h2 {
  23. font-weight: normal;
  24. }
  25. ul {
  26. list-style-type: none;
  27. padding: 0;
  28. }
  29. li {
  30. display: inline-block;
  31. margin: 0 10px;
  32. }
  33. a {
  34. color: #42b983;
  35. }
  36. </style>

配置路由:

/router/index.js

  1. import Vue from 'vue'
  2.  
  3. import Router from 'vue-router'
  4.  
  5. import HelloWorld from '@/components/HelloWorld'
  6. import A from '@/components/A'
  7. import B from '@/components/B'
  8. import C from '@/components/C'
  9. Vue.use(Router)
  10. export default new Router({
  11. routes: [
  12. {
  13. path: '/',
  14. name: 'HelloWorld',
  15. component: HelloWorld
  16. },
  17. {
  18. path: '/A',
  19. name: 'A',
  20. component: A
  21. },
  22. {
  23. path: '/B',
  24. name: 'B',
  25. component: B
  26. },
  27. {
  28. path: '/C',
  29. name: 'C',
  30. component: C
  31. }
  32. ]
  33. })

在 HelloWord.vue中引入A、B、C三个组件的连接

  1. <template>
  2. <div class="hello">
  3. <ul>
  4. <li>
  5. <a href="/#/A">A</a>
  6. </li>
  7. <li>
  8. <a href="/#/B">B</a>
  9. </li>
  10. <li>
  11. <a href="/#/C">C</a>
  12. </li>
  13. </ul>
  14. </div>
  15. </template>
  16. <script>
  17. export default {
  18. name: 'HelloWorld',
  19. data () {
  20. return {
  21. msg: 'Welcome to Your Vue.js App'
  22. }
  23. }
  24. }
  25. </script>
  26. <!-- Add "scoped" attribute to limit CSS to this component only -->
  27. <style scoped>
  28. h1, h2 {
  29. font-weight: normal;
  30. }
  31. ul {
  32. list-style-type: none;
  33. padding: 0;
  34. }
  35. li {
  36. display: inline-block;
  37. margin: 0 10px;
  38. }
  39. a {
  40. color: #42b983;
  41. }
  42. </style>

运行命令:npm run dev

打开网站运行一下:

到这里vue-router的初级应用就介绍完了,总结下,有三个部分的知识点

1.定义三个组件 A、B、C

2.在router/index.js文件中引入三个组件,并做相应的路由配置

3.在页面中添加3个a标签,分别跳转到对应的组件

这部分内容比较初级,只是对路由做了简单的演示,通过定义好的路由进入对应的组件,在我们平时开发中,涉及到的需求要比这复杂的多,后面的内容会慢慢加深难度,接下来开始讲解vue-router的进阶版:vue-router 中级应用,这部分内容分三个小节:

1.怎么动态定义路由

在上一节我们定义路由的方式是一个路由对应一个组件,但是,当有符合某一条件下的所有路由都映射到同一个组件,这种路由要怎么配置呢?比如,要把A-Z组件全部映射到Alphabet组件。
这个时候就可以用动态路由解决这个问题。
先创建一个Alphabet.vue组件

  1. <template>
  2. <div class="hello">
  3. <ul>
  4. <li>
  5. this is <strong>{{ $route.params.letter }}</strong>
  6. </li>
  7. </ul>
  8. </div>
  9. </template>
  10. <script>
  11. export default {
  12. name: 'HelloWorld',
  13. data () {
  14. return {
  15. name: 'my name is B!'
  16. }
  17. }
  18. }
  19. </script>
  20. <!-- Add "scoped" attribute to limit CSS to this component only -->
  21. <style scoped>
  22. h1, h2 {
  23. font-weight: normal;
  24. }
  25. ul {
  26. list-style-type: none;
  27. padding: 0;
  28. }
  29. li {
  30. display: inline-block;
  31. margin: 0 10px;
  32. }
  33. a {
  34. color: #42b983;
  35. }
  36. </style>

在路由配置文件中,新增如下配置:

  1. {
  2. path: '/alphabet/:letter', // 动态路由参数,以冒号开头
  3. name: 'Alphabet',
  4. component: Alphabet
  5. }

这样配置生效后:
符合 /alphabet/** 的路径全部都匹配到组件 Alphabet
运行效果如下:

到这里,就完成了一个动态路由的配置与运行。
注意:动态路由一定要以冒号开始,冒号后面这个字符串是参数,当匹配到一个路由是,这个值会配置设置到 this.$route.params 之中,可以在映射到的任何一个组件内使用。像我们在程序中写的那样,通过 $route.params.letter 可以拿到路径中匹配到的参数值。

匹配模式 匹配路径  参数值($route.params.letter)
/alphabet/:letter  /alphabet/a  a

2.路由中怎么传递参数

在动态设置路由中也达到了传递参数的目的,但是这并不是正确的传递参数的姿势,只是得到了路径中的一个url节点。用这种方式传递参数比较局限。
我们下面介绍另一种传递参数的方式,在介绍这种方式之前,需要先了解一个组件:router-link
router-link才是添加导航连接的正确方式。有人可能会说,那我直接使用<a></a>不是一样的效果吗,而且写起来还更简单。
非也,能提到这一点肯定还不知到其实router-link默认的渲染结果就是<a></a>
<router-link to="/link">link</router-link>
渲染结果
<a data-v-acf16c92="" href="#/link" class="">link</a>
知道这一点是不是对router-link更好奇了,那看看还有哪些更好用的属性?
to:将要到达的连接,可接受的参数有两种string、object,并且这个属性是必须要添加的。
当使用string类型时,这个string值就是路径,没啥好说的,重点看一下当参数是object时,router-link是怎么渲染的,同时,参数也是在这个object中写入的。
写个2个例子,
<router-link :to="{ name: 'link', params: { myName: '李古拉雷' }}">User</router-link>
<!--渲染结果-->
<a data-v-acf16c92="" href="#/" class="router-link-active">User</a>

<router-link :to="{ path: '/link', query: { myName: '李古拉雷' }}">User</router-link>
<!--渲染结果-->
<a data-v-acf16c92="" href="#/link?myName=%E6%9D%8E%E5%8F%A4%E6%8B%89%E9%9B%B7" class="">User</a>
两种写法渲染出来两种不同的传参方式,看起来好像一种是post传参,一种是get传参。
但是这两种方式接受参数的方式却是一样的
第一种:this.$router.params.myName
第二种:this.$router.query.myName

tag:这个属性就是决定最终渲染成什么标签的,因为默认值是 a,所以router-link的默认渲染成<a></a>标签,如果我把tag设置成li,我们看一下会渲染成什么,
<router-link tag="li">User</router-link>
<!--渲染结果-->
<li data-v-acf16c92="" class="">User</li>
就是一个li标签,但是一样会监听点击事件,触发路由导航。
还有些其它更好完的属性,但是,不是本部分的介绍范围,我们此处只介绍怎么传递参数,有兴趣的自行前往:https://router.vuejs.org/zh/api/#router-link-props

3.路由命名有什么用

vue-router使用 看着篇就够了的更多相关文章

  1. Vue学习看这篇就够

    Vue -渐进式JavaScript框架 介绍 vue 中文网 vue github Vue.js 是一套构建用户界面(UI)的渐进式JavaScript框架 库和框架的区别 我们所说的前端框架与库的 ...

  2. Vue开发入门看这篇文章就够了

    摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...

  3. React入门看这篇就够了

    摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...

  4. [转]React入门看这篇就够了

    摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...

  5. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  6. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...

  7. 想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了!

    想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了!   很多通信系统发展到某种程度都会有小型化的趋势.一方面小型化可以让系统更加轻便和有效,另一方面,日益发展的IC**技术可以用更低的成本生产 ...

  8. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...

  9. ExpandoObject与DynamicObject的使用 RabbitMQ与.net core(一)安装 RabbitMQ与.net core(二)Producer与Exchange ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler) .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

    ExpandoObject与DynamicObject的使用   using ImpromptuInterface; using System; using System.Dynamic; names ...

  10. 【转】ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    原文链接:https://www.cnblogs.com/yilezhu/p/9241261.html 引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必 ...

随机推荐

  1. 使用springmvc进行文件的上传和下载

    文件的上传 SpringMVC支持文件上传组件,commons-fileupload,commons-fileupload依赖commons-io组件 配置步骤说明 第一步:导入包 commons-f ...

  2. 2019春第九周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 这里 我在这个课程的目标是 能更加进一步的够熟练掌握指针的用法 这个作业在那个具体方面帮助我实现目标 能解更多的题 参考文献与网址 C语言 ...

  3. 3.2.2 SpringMVC配置式开发

    SpringMVC配置式开发 1. SpringMVC运行原理(执行过程) 2. 需求 用户提交一个请求, 服务端处理器接收到请求后, 给出一条信息,在相应页面中显示该条信息 3. 开发步骤 (1) ...

  4. docker容器的实践——综合项目一

                    Docker 综合实验   实验拓扑:   [调度器] Keepalived + nginx 一.Keepalived服务的安装配置: 关闭LVS服务器的ipv4代理和 ...

  5. UBUNTU安装 SSH 服务

    输入命令"sudo apt -y install openssh-server" 输入当前用户密码,等待完成openssh-server安装. 安装完毕,运行命令"sud ...

  6. ASP.NET MVC案例教程(七)

      前言 写这篇文章的目的,是想总结一些东西,以帮助朋友们更好的使用这个框架.但是,我又不像把官方列举的哪些优势.功能翻译过来列举在这里.所以,我想干脆我就纯从个人观点上对这个框架评论一下吧.说的不好 ...

  7. keil在线烧录突然提示 No target connected #

    keil在线烧录突然提示 No target connected 运行环境 IDE:keil uvsion5 微处理器:STM32F0xx 系列 烧录器:ST-LINK/V2 问题描述 烧录新程序并进 ...

  8. Halcon 和 C# 联合编程 - 图像变量的相互转换(HObject、HImage、Bitmap)

    /// <summary> /// 灰度图像 HObject -> Bitmap /// </summary> public static Bitmap HObject2 ...

  9. [批处理]使用IncrediBuilder加速自动化测试过程

    背景 1.目前单机全部跑完一次测试的时间大概是5个小时 2.7个虚拟机进行分布式执行的时间大概为3.5小时(包含复制.收集日志的时间) 预期 期望通过IncrediBuilder的虚拟进程的功能在单机 ...

  10. Mysql如何进行分组,并且让每一组的结果按照某个字段排序,并且获取每一组的第一个字段

    select * from (select * from table_name order by id desc) h where h.catagory_id in(value1,value2,val ...