静态路由是不可以传递参数的。需要传递参数得用到动态路由

那么如何将参数作为路由呢?

//在参数名前面加上 : ,然后将参数写在路由的 path 内 

routes: [

    //将页面组件与path指令的路由关联

   { name: 'BookInfo', path: '/books/:id', component: BookInfo}

]

这样定义之后,vue-router就会匹配所有的:/books/1,/books/2,/books/3 ……,所以说这样定义的路由的数量是不确定的。

<router-link> 我们加入一个 params 属性来指定具体的参数值

    <li>
<router-link :to ="{name:'BookInfo',params :{id:1}}" >
<div>首页</div>
</router-link>
</li>

上面的链接对应就为:http://localhost:8080/__dirname/books/1

如果需要传入多个参数值,只要按照上面的命名方法来加入参数,传递在params中对应的声明参数值即可,vue-router只要匹配到路由模式的定义就会自动对参数进行分解取值 
如 path: '/books/version/:id',则对应params为:params :{id:1,version:1}

如何从路由中将这个参数值读取出来呢?

通过 $route.params这个属性获取指定的参数值,如:this.$route.params.id,this.$route.params.msg

如果希望在相应的组件页面内输出参数值,对应代码如下:

<p>当前图书编号是:{{$route.params.id}}</p>

如果想在js代码中根据参数值做相应的处理,则在默认路由中加入如下代码:

export default {
name: "app",
created() {
alert(this.$route.params.id);
}
};

当使用路由参数的时候,如 从/books/1 到 /books/2 ,原来的组件实例会被复用,因为两个路由都渲染同一个组件,比起销毁后再创建,复用的销率会更高。 
这也就是说 组件的生命周期钩子不会再被调用(组件没有被销毁后再创建) ,即 created mounted 等钩子函数在页面第二次加载的时候回失效

那么,当复用组件时候,想对路由参数的变化做出响应的话,就需要在 $watch 对象内添加对 $route 对象变化的跟踪函数

<script>
export default {
name: "app",
watch :{
'$route' (to,from){
alert(to.params.id);
}
}
};
</script>

$route.params 定义的参数必然是整个路由的其中一部分,vue-router 还可以让我们使用 "/path?param = value" 的方式传递参数,可以使用$route.query.参数名 获取参数值 
vue-router 还提供一种常量参数定义 meta,我们可以在路由定义中先定义 meta 的值,然后在路由实例中通过$route.meta参数获取具体常量值。

如下代码($route.query.参数名

{ name: 'BookInfo', path: '/books/:id/?bookName=Lost', component: BookInfo }

获取其中 bookName 的值的代码为 this.$route.query.msg

如下代码($route.meta.参数名

{ name: 'BookInfo', path: '/books/:id', component: BookInfo ,meta: { bookName : 'Lost In River' }}

获取其中 bookName 的值的代码为 this.$route.meta.bookName

Vue.js 中的动态路由的更多相关文章

  1. Vue.js中,如何自己维护路由跳转记录?

    在Vue的项目中,如果我们想要做返回.回退操作时,一般会调用router.go(n)这个api,但是实际操作中,使用这个api有风险,就是会让用户跳出当前应用,因为它记录的是浏览器的访问记录,而不是你 ...

  2. 实例分析Vue.js中 computed和methods不同机制

    在vue.js中,有methods和computed两种方式来动态当作方法来用的 1.首先最明显的不同 就是调用的时候,methods要加上() 2.我们可以使用 methods 来替代 comput ...

  3. vue.js中,input和textarea上的v-model指令到底做了什么?

    v-model是 vue.js 中用于在表单表单元素上创建双向数据绑定,它的本质只是一个语法糖,在单向数据绑定的基础上,增加了监听用户输入事件并更新数据的功能: 对,它本质上只是一个语法糖,但到底是一 ...

  4. Vue.js中使用select选择下拉框

    在Vue.js中使用select选择下拉框有两种方法: 第一种: Add.html: <select v-model="sysNotice.noticeType" id=&q ...

  5. vue.js 中双向绑定的实现---初级

    1. 1 我们看到的变量,其实都不是独立的,它们都是windows对象上的属性 <!DOCTYPE html> <html lang="en"> <h ...

  6. 浅析Vue.js 中的条件渲染指令

    1 应用于单个元素 Vue.js 中的条件渲染指令可以根据表达式的值,来决定在 DOM 中是渲染还是销毁元素或组件. html: <div id="app"> < ...

  7. vue.js中的slot

    vue.js 中的 slot 一.slot 的作用 调用组件的时候,对于数据,我们会用props将数据从父组件传至子组件.但是,如果从父组件到子组件,单纯是页面局部渲染的改变,slot会更合适. 二. ...

  8. Vue.js中css的作用域

    Vue.js中的css的作用域问题: 如果在vue组件下的style中定义样式,效果会作用于整个html页面,如果只想本组件的css样式只作用于本组件的话,在<style>标签里添加sco ...

  9. vue.js 中 data, prop, computed, method,watch 介绍

    vue.js 中 data, prop, computed, method,watch 介绍 data, prop, computed, method 的区别 类型 加载顺序 加载时间 写法 作用 备 ...

随机推荐

  1. 平衡搜索树--红黑树 RBTree

    红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black. 通过对任何一条从根到叶子节点简单路径上的颜色来约束树的高度,红黑树保证最长路径不超过最短路径的两倍, ...

  2. 20165101刘天野 2018-2019-2《网络对抗技术》Exp2 后门原理与实践

    目录 20165101刘天野 2018-2019-2<网络对抗技术>Exp2 后门原理与实践 1. 实验内容 1.1 使用netcat获取主机操作Shell,cron启动 1.2 使用so ...

  3. 让Tomcat供外网访问

    使用Tomcat+花生壳部署一个Javaweb网站,步骤分为三步. 第一,花生壳配置. 下载花生壳,并默认安装.申请动态域名,激活护照,登录.(都是常规操作,不必多说) 第二,Tomcat设置. 找到 ...

  4. Spring AOP 前奏--动态代理

  5. 使用node-inspector调试NodeJS代码

    使用node-inspector调试NodeJS代码 任何一门完备的语言技术栈都少不了健壮的调试工具,对于NodeJS平台同样如此,笔者研究了几种调试NodeJS代码的方式,通过对比,还是觉得node ...

  6. Oracle索引以及索引碎片

    索引,可以增加查询速度,若没有索引,每次查询都必须是全表查询.例如,搜索某个记录时(如name="gdpuzxs")时,需要全表扫描一下,因为不知道有多少个name="g ...

  7. Android Studio混淆打包

    1.apk混淆打包 如果要对apk进行混淆,你要先告知gradle这个app需要混淆,并告知其混淆规则. 告知gradle需要混淆的代码 在Project/app/build.gradle中把mini ...

  8. 全国城市部分js

    var areaJson22 = { "id": "0", "name": "全国", "parentId&q ...

  9. CSS自定义字体(@font-face选择符)

    @font-face是CSS中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体. 语法规则: @f ...

  10. 四边形不等式优化_石子合并问题_C++

    在动态规划中,经常遇到形如下式的状态转移方程: m(i,j)=min{m(i,k-1),m(k,j)}+w(i,j)(i≤k≤j)(min也可以改为max) 上述的m(i,j)表示区间[i,j]上的某 ...