自己看vue文档,难免有些地方不懂,自己整理一下,主要是vue-router具体实现的操作步骤。

安装

直接下载/CDN

Unpkg.com提供了基于 NPM 的 CDN 链接。上面的链接会一直指向在 NPM 发布的最新版本。你也可以像

在 Vue 后面加载 vue-router,它会自动安装的:

NPM

npm install vue-router

如果在一个模块化工程中使用它,必须要通过 Vue.use() 明确地安装路由功能:

import Vue from 'vue'

import VueRouter from 'vue-router'

Vue.use(VueRouter)

如果使用全局的 script 标签,则无须如此(手动安装)。

#基础

开始

HTML:

Hello App!

Go to Foo

Go to Bar

显示的当前路由的内容

实现路由的跳转

JavaScript:

// 0. 如果使用模块化机制编程,導入Vue和VueRouter,要调用 Vue.use(VueRouter)

// 1. 定义(路由)组件。

// 可以从其他文件 import 进来

const Foo = { template: '

foo

' }

const Bar = { template: '

bar

' }

// 2. 定义路由

// 每个路由应该映射一个组件。 其中"component" 可以是

// 通过 Vue.extend() 创建的组件构造器,

// 或者,只是一个组件配置对象。

// 我们晚点再讨论嵌套路由。

const routes = [

{ path: '/foo', component: Foo },

{ path: '/bar', component: Bar }

]

// 3. 创建 router 实例,然后传 `routes` 配置

// 你还可以传别的配置参数, 不过先这么简单着吧。

const router = new VueRouter({

routes // (缩写)相当于 routes: routes

})

// 4. 创建和挂载根实例。

// 记得要通过 router 配置参数注入路由,

// 从而让整个应用都有路由功能

const app = new Vue({

router

}).$mount('#app')

// 现在,应用已经启动了!

当 对应的路由匹配成功,将自动设置 class 属性值 .router-link-active

步骤:

1.在main.js中引入vue-router

import Vue from 'vue'

import VueRouter from 'vue-router'

2.在main.js中使用这个router插件

Vue.use(VueRouter)

3.生成这个router实例

export default new Router(){

routes:[

{

path:'/',

name:'home',

component:Home

},{

path:'/list',

name:'list',

component:List

}

]

}

4.在index.js中把路由实例传递给Vue根组件

import router from './router'

new Vue({

el:'#app',

router,

template:'',

components:{ APP }

})

静态路由

静态配置的 ---> import ....

固定路径路由的配置

{

path:'/',

name:'home',

component:Home

},{

path:'/list',

name:'list',

component:List

}

动态路由匹配

只有动态路由可以做到分页的效果

{

path:'/list/:id',

name:'list',

component:List

}

list.vue

{{title}}

return {

title:""

}

}

export default{

mounted(){

if(this.$route.params.id == 1){

//请求第一页数据

this.title="第一页"

}

if(this.$route.params.id == 2){

//请求第二页数据

this.title="第二页"

}

}

}

接收多个个参数

index.js

{

path:'/list/:id/name/:name',

name:'list',

component:List

}

list.vue

{{title}}{{name}}

return {

title:"",

name:""

}

}

export default{

mounted(){

//结构赋值写法

const {name,id} = this.$route.params;

this.name = name;

//this.name = this.$route.params.name;

if(this.$route.params.id == 1){

//请求第一页数据

this.title="第一页"

}

if(this.$route.params.id == 2){

//请求第二页数据

this.title="第二页"

}

}

}

传递不同参数 显示不同数据

项目应用:详情页

watch 响应路由参数的变化

监听路由的变化

watch:{

'$route'(to,from){

this.name = to.params.name;

}

}

在2.2中引入守卫( beforeRouteUpdate)

守卫 --> 钩子函数

beforeRouteUpdate (to, from, next) {

this.name = to.params.name;

next();//走到下一个钩子

}

嵌套路由

头部左侧不变只有内容区改变 这样的需求可以用嵌套路由来做

{

path:'/list',

name:'list',

component:List,

childeren:[{

path:'a',

component:A

}]

}

再引入一个A组件 A.vue

在list.vue组件中通过,显示A组件的内容

在一个非app组件里面写显示的是当前路由下子组件的内容

编程式的导航

除了来创建a标签来定义导航链接,还可以借助router的实例方法

router.push(location,onCompelte?,onAbort?)

在Vue实例内部,可以通过$route访问路由实例,因此你可以调用this.$route.push

想要导航到不同的URL,则使用router.push方法。这个方法会向history栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的URL。

当你点击时,这个方法会在内部调用,所以说,

点击 ---> 声明式

等同于

调用router.push(...) --->编程式

可以在Header组件中跳转到list中

export defalut{

methods:{

handleClick(){

this.$router.push({

name:'list'

})

}

}

}

可以在Header组件中跳转到list/123中

export defalut{

methods:{

handleClick(){

this.$router.push({

//一种方式

//path:'/list/123',

//2种方式

name:'list'

params:{

id:123

}

})

}

}

}

使用router.push 或者 router.replace 里面都不能让path和params同时存在

//字符串

router.push('home');

//对象

router.push({path:'home'})

//命名的路由

router.push({name:'user',params:{userId:123}})

//带查询参数,变成/register?plan=private

router.push({path:'register',query:{plan:'private'}})

router.replace

和router.push唯一的不同就是,不会向history添加新纪录,而是替换掉当前的history记录不能返回

router.go

命名路由

定义名字跳转

命名视图

var app = new VueRouter({

routers:[{

path:'/',

componens:{

defaults:Foo,

a:Bar,

b:Baz

}

}]

})

重定向和别名

访问/abc 重定向到/根路径

{

path:'/abc',

redirect:'/'

}

访问/bieming 实际上还是访问的根路径

{

path:'/',

name:'home',

component:Home,

alias:'/bieming'

}

路由组件传参

解耦

动态路由传id

{

path:'/list/:id',

name:'list',

component:List,

props:true

}

在list.vue中

可以直接通过props['id']获取数据

{{id}}

props['id']

}

对象模式

props:{name:"dell"}

一般是写死的字符串静态数据

函数模式

index.js

{

path:'/list/:id',

name:'list',

component:List,

props : (route)=>({

query:route.query.q

id:route.params.id

})

}

list.vue

{{query}}
{{id}}

props['query','id']

}

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1rr2npw3kickj

vue 路由id_vue路由详解相关推荐

  1. Vue路由传参详解(params 与 query)

    Vue路由传参详解(params 与 query) 前言: 路由传参分为 params 传参与 query 传参 params 传参类似于网络请求中的 post 请求,params 传过去的参数不会显 ...

  2. element ui路由配置文件_element-ui使用导航栏跳转路由的用法详解

    最近初学vue,试着做一个小项目熟悉语法与思想,其中使用elemen-ui的导航栏做路由跳转切换页面.下面记录一下学习过程 element-ui引入vue项目的用法参考 首先复制官网的例子,在这基础上 ...

  3. php为什么需要配置路由器,laravel 配置路由 api和web定义的路由的区别详解

    1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware ...

  4. ElasticSearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解...

    墨墨导读:之前我们分享了ElasticSearch最全详细使用教程:入门.索引管理.映射详解,本文详细介绍ElasticSearch的索引别名.分词器.文档管理.路由.搜索详解. 一.索引别名 1. ...

  5. 加载vue文件步骤_vue中.vue文件解析步骤详解

    这次给大家带来vue中.vue文件解析步骤详解,vue中.vue文件解析的注意事项有哪些,下面就是实战案例,一起来看一下. 我们平时写的 .vue 文件称为 SFC(Single File Compo ...

  6. 实例化vue发生了什么?(详解vue生命周期)

    实例化vue发生了什么?(详解vue生命周期) 本文将对vue的生命周期进行详细的讲解,让你了解一个vue实例的诞生都经历了什么~ 我在Github上建立了一个存放vue笔记的仓库,以后会陆续更新一些 ...

  7. vue中mint-ui使用详解

    这次给大家带来vue中mint-ui使用详解,vue中mint-ui使用的注意事项有哪些,下面就是实战案例,一起来看一下. mint-ui在vue中的使用,供大家参考,具体内容如下 首先放上mint- ...

  8. vue基础扩展8--solt详解

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><title& ...

  9. vue如何过滤html标签,Vue过滤器filters使用详解

    这次给大家带来Vue过滤器filters使用详解,Vue过滤器filters使用的注意事项有哪些,下面就是实战案例,一起来看一下. 示例代码 采用vue单文件组件,使用moment插件格式化日期 {{ ...

  10. mixins php,vue的mixins属性详解

    这篇文章主要介绍了vue的mixins属性详解,现在分享给大家,也给大家做个参考. 首先先给出官网 https://vuejs.org/v2/guide/mixins.html 今天在开发项目的时候要 ...

最新文章

  1. memcache缓存失效
  2. 如何为jframe设置于右侧滑轮_如何为电脑设置屏保密码?
  3. 输入一行字符,判断单词数
  4. 6.0的版本的 tc,不支持大漠对象做数组吗?
  5. Linux Kernel aarch64的ARM-CE aes-ecb的底层代码导读
  6. Stanford 研究领域
  7. [我的证书]一证一书,当思来之不易 半分半秒,恒念学无止步
  8. Springboot端口设置
  9. 【Greenplum异常】数据库报错 could not create temporary file No space left on device(求解决)
  10. Oracle左右链接
  11. java 读取 excel poi_java poi怎么获取excel单元格的内容?
  12. 方根法公式_仓储管理笔记之库存分析法:ABC分析法、区域合并法......
  13. [PY3]——IO——文件目录操作
  14. flask v0.1 项目工程
  15. ZZH:魔兽世界之000:MPQ
  16. 衬线字体、无衬线字体、等宽字体的定义和LaTeX命令以及text系列与family系列、series系列、shape系列的区别和联系
  17. android五中布局 四大组件,Android 四大组件五大布局
  18. java+MySQL基于ssm的公文流转关管理系统
  19. Win10运行红色警戒2尤里的复仇联机技巧+防守地图
  20. CAD中怎么旋转箭头符号?

热门文章

  1. 视频流中ES,PES,PS,TS,RTP概念说明
  2. python中如何实现复制粘贴_复制粘贴功能的Python程序 python 中如何实现
  3. 斜线/、反斜线\、双斜线//、双反斜线\\——详解
  4. Kubernetes:HPA 详解-基于 CPU、内存和自定义指标自动扩缩容
  5. GNU/Linux上程序的国际化和本地化(I18N I10N)
  6. selenium+ Phantomjs爬取动态网页
  7. 深圳市公务员考试计算机专业素养,深圳市考职位分析_公务员考试专业对照表...
  8. sap制造业成本核算流程(转自互联网)
  9. Java模拟操作系统实验一:四种进程调度算法实现(FCFS,SJF,RR,HRN)
  10. 西安电大计算机考试在线模拟试题,2021年度电大计算机基础考试试题及答案大全好.doc...