当我们在做产品列表跳转到产品详情的时候,按照以往的思想,是以router-link
来进行跳转,但是这样会多加一个a
标签,而我们又不想多加一个标签,直接将router-link
代替之前的div
么?
样式又要重新写啊,,因为渲染出来,还是以a标签的形式,只是没有多增加一个标签了,这个时候我们可以用这个属性:
这样渲染出来的就是
div
,但是点击同样可以进行跳转,:to
动态绑定跳转路径为/detail/
+ item.id
,根据产品的不同id
来跳转到不同的详情。这样就实现了参数的传递,将
id=002
传入了过去,然后还要增加路由配置。去
router/index.js
增加配置项因为
detail
后面还会跟一个参数路径过来,所以这里选择用动态路由。在
Vue
里,通过/detail/
后面加一个:id
的形式,就是一个动态路径。'/detail/:id'
它的意思是,前面的路由必须是
detail/
,后面可以带一个参数,参数可以放到id
变量里。
ajax获取动态路由的id
在页面上是这样来写的axios.get('/api/detail.json?id=' + this.$route.params.id)
到浏览器上看:
这样实际上还是有点麻烦,可以换个写法。
效果是一样的。
请求数据
别忘了,本来商品详情应该根据id
的不同,来重新渲染页面。但是因为我们使用了keep-alive
,这样导致我们回到首页,再一次进入商品详情页的时候,不会再发起新的请求,直接从缓存中拿出内容。
除去我们之前说的在activated
这个钩子里再发起一次ajax
请求之外,我们还可以用另外一种方法。
去App.vue
这个组件内。
原本我们是将在router-view
外层套了个keep-alive
。导致所有的页面都有keep-alive
,那可不可以让详情页面不是keep-alive
呢?
可以的。
在
keep-alive
加一个exclude
属性,然后将详情组件的名字写上去。
滚动行为
什么叫做滚动行为?点我点我
通俗的来说,你在首页如果滚动到最下方面,然后从这里进入一个另外一个页面,但是进入的时候默认在第二个页面的最下方。
怎么解决?
小case
啦,复制这样一段代码
scrollBehavior (to, from, savedPosition) {
return { x: 0, y: 0 }
}
将这段代码复制到配置router
的那里,也就是