【Vue22】动态路由

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

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

加一个tag:div

这样渲染出来的就是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发起了请求

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


这样分开写

效果是一样的。

请求数据

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

加一个exclude属性

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

滚动行为

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

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

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

这个目录下的这里

在文件的这里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,796评论 1 92
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,287评论 25 708
  • Category(分类) 我们为什么要用Category 当我们需要为已知的类添加方法的时候,我们就可以考虑使用C...
    Randall_Steven阅读 401评论 0 0
  • 记忆中的父亲,是寡言的。 “来,看看今天谁走得最快……” 还记得那年在深圳,我和父亲走在两人各自上学、上班的同段小...
    朝阳拾忆铺阅读 428评论 0 1
  • 朗朗夜空月上梢 灯下行人三二过 雀鹊依偎同屋眠 徒增羡煞夜归人
    寒冰英子阅读 143评论 0 2