Vue js 中的动态路由

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                       

在文章 使用vue-router完成简单导航功能 中实现的路由导航功能是不能传递参数的,也就是说是静态路由。

而能传递参数的路由模式,由于可以传递参数,所以其对应的路由数量是不确定的,故称之为 动态路由

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

 

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

如下示例:

  routes: [    //将页面组件与path指令的路由关联    { name: 'BookInfo', path: '/books/:id', component: BookInfo }  ]
   
   
  • 1
  • 2
  • 3
  • 4

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

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

扫描二维码关注公众号,回复: 4121952 查看本文章
        <li>          <router-link :to ="{name:'BookInfo',params :{id:1}}" >            <div>首页</div>          </router-link>        </li>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5

上面的链接对应就为: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>
   
   
  • 1

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

export default name: "app"created() {    alert(this.$route.params.id)}};
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
 

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

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

<script>export default {  name: "app",  watch :{    '$route' (to,from){      alert(to.params.id);    }  }};</script>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

 

$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 }
   
   
  • 1

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

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

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

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

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_43685425/article/details/84035840
今日推荐