【Vue22】动态路由

当我们在做产品列表跳转到产品详情的时候,按照以往的思想,是以router-link来进行跳转,但是这样会多加一个a标签,而我们又不想多加一个标签,直接将router-link代替之前的div么?

样式又要重新写啊,,因为渲染出来,还是以a标签的形式,只是没有多增加一个标签了,这个时候我们可以用这个属性:

【Vue22】动态路由_第1张图片
加一个tag:div

这样渲染出来的就是 div,但是点击同样可以进行跳转,
:to动态绑定跳转路径为 /detail/ + item.id,根据产品的不同 id来跳转到不同的详情。
传递了参数

这样就实现了参数的传递,将 id=002传入了过去,然后还要增加路由配置。
router/index.js增加配置项
【Vue22】动态路由_第2张图片
路由配置

因为 detail后面还会跟一个参数路径过来,所以这里选择用动态路由。
Vue里,通过 /detail/后面加一个 :id的形式,就是一个动态路径。 '/detail/:id'
它的意思是,前面的路由必须是 detail/,后面可以带一个参数,参数可以放到 id变量里。

ajax获取动态路由的id

在页面上是这样来写的axios.get('/api/detail.json?id=' + this.$route.params.id)
到浏览器上看:

【Vue22】动态路由_第3张图片
已经带了id发起了请求

这样实际上还是有点麻烦,可以换个写法。


【Vue22】动态路由_第4张图片
这样分开写

效果是一样的。

请求数据

别忘了,本来商品详情应该根据id的不同,来重新渲染页面。但是因为我们使用了keep-alive,这样导致我们回到首页,再一次进入商品详情页的时候,不会再发起新的请求,直接从缓存中拿出内容。
除去我们之前说的在activated这个钩子里再发起一次ajax请求之外,我们还可以用另外一种方法。
App.vue这个组件内。
原本我们是将在router-view外层套了个keep-alive。导致所有的页面都有keep-alive,那可不可以让详情页面不是keep-alive呢?
可以的。

【Vue22】动态路由_第5张图片
加一个exclude属性

keep-alive加一个 exclude属性,然后将详情组件的名字写上去。

滚动行为

什么叫做滚动行为?点我点我
通俗的来说,你在首页如果滚动到最下方面,然后从这里进入一个另外一个页面,但是进入的时候默认在第二个页面的最下方。
怎么解决?
case啦,复制这样一段代码

scrollBehavior (to, from, savedPosition) {
  return { x: 0, y: 0 }
}

将这段代码复制到配置router的那里,也就是

这个目录下的这里

【Vue22】动态路由_第6张图片
在文件的这里

你可能感兴趣的:(【Vue22】动态路由)