一、前言

1、导航滑动实现

  2、渲染列表信息时让一开始加载的时候就请求数据

3、根据路由的改变,加载图文的改变(实现用户访问网站时可能执行的三个操作)

二、主要内容

1、导航滑动实现:

  (1)演示效果:

  (2)代码实现

  1. <!--导航栏用ul li实现-->
  2. <ul>
  3. <li v-for='(item,index) in categoryList' :key='index'>
  4. <a href="javascript:;">{{item.title}}</a>
  5. </li>
  6.  
  7. </ul>
  8. </div>
  9.  
  10. <style>
  11.  
  12. li {
  13. list-style: none;
  14. display: inline-block;
  15. margin-left: 10px;
  16. height: 30px;
  17. }
  18.  
  19. ul {
  20. /*强制不换行*/
  21. white-space: nowrap;
  22. overflow-x: auto;
  23. padding-left: 0px;
  24. margin: 5;
  25. }
  26.  
  27. </style>

2、渲染列表信息时让一开始加载的时候就请求数据

  (1)在methods里面封装一个请求的方法

  1. export default{
  2. name:'PhotoList',
  3. data(){
  4. return{
  5. categoryList,
  6. title_h:'图文分享'
  7. }
  8. },
  9.  
  10. methods:{
  11. loadImageByCategoryId(id){ //这里传入请求的id
  12. this.$axios.get('api/index?type=top&key=79b64827a7a0f95504dfb2f7e903208d'+id)
  13. .then(res=>{
  14. console.log(res.data.result.data)
  15. })
  16. .catch(err=>{
  17. console.log('数据获取失败',err);
  18. })
  19. }
  20.  
  21. }
  22. }

  (2)在created()中最开始就调用这个方法

  1. created(){
  2.  
  3. this.loadImageByCategoryId(0);//0表示所有的数据
  4.  
  5. this.$axios.get('api/index?type=top&key=79b64827a7a0f95504dfb2f7e903208d')
  6. .then(res=>{
  7.  
  8. console.log(res.data.result.data)
  9. })
  10. .catch(err=>{
  11. console.log('新闻数据获取失败',err)
  12. })
  13. }

  (3)当图片过多的时候需要设置图片懒加载(n+1)模式,这里用mint-ui里面的v-lazy

  1. //Mint-ui里面的图片懒加载
  2. <img v-lazy='item.img_url'>

3、根据路由的改变,加载图文的改变(牵涉到动态路由的匹配:https://router.vuejs.org/zh/guide/essentials/dynamic-matching.html#响应路由参数的变化)

  官网上明确告诉我们:当路由从/user/foo 导航到 /user/bar, 原来的组件实例会被复用。因为两个路由都渲染同一个组件,比起销毁再创建,复用显得更加高效。不过,这意味着组件的生命周期钩子不会再被调用。复用组件时,如果想对不同的路由参数做出不同的响应的时候,此时可以用1)watch监听  2)使用beforeRouteUpdate导航守卫

操作一:在当前网站中,直接在url输入动态路由

 (1)下面用beforeRouteUpdate(to, from, next){ }来实现

  1. methods:{
  2. loadImageByCategoryId(id){ //这里传入请求的id
  3. this.$axios.get('api/index?type=top&key=79b64827a7a0f95504dfb2f7e903208d')
  4. .then(res=>{
  5. console.log(res.data.result.data)
  6. })
  7. .catch(err=>{
  8. console.log('数据获取失败',err);
  9. })
  10. }
  11.  
  12. },
  13.  
  14. created(){
  15. //api/index?type=top&key=79b64827a7a0f95504dfb2f7e903208d
  16. this.loadImageByCategoryId(0);//0表示所有的数据
  17.  
  18. this.$axios.get('api/index?type=top&key=79b64827a7a0f95504dfb2f7e903208d')
  19. .then(res=>{
  20.  
  21. console.log(res.data.result.data)
  22. })
  23. .catch(err=>{
  24. console.log('新闻数据获取失败',err)
  25. })
  26. },
  27.  
  28. beforeRouteUpdate(to, from, next){
  29. //在当前路由改变,但是该组价被复用时调用
  30. //举例来说,对于一个带有动态参数的路径/foo/:id 在/foo/1 和 /foo/2之间跳转的时候
  31. //由于会渲染同样的Foo组件,因此组件实例会被复用。这个钩子在这个时候就会被调用
  32. console.log(to);//to是目的
  33. this.loadImageByCategoryId(to.params.categoryId); //拿到里面的路由参数调用上面封装的请求方法,就会根据不同的参数请求到不同类型的数据
  34. }
  35. }

操作二:很多时候通过点击上面的滑动导航改变路由

  (1)给每个导航li标签注册点击事件,然后将当前的id传进去

  1. <div class="photo-header">
  2. <ul>
  3. <li v-for='(category,index) in categoryList' :key='index' @click='categoryHandler(category.id)'>
  4. <router-link :to="category.routerName" exact @click.native ='changeHash()'>{{item.title}}</router-link>
  5.  
  6. </li>
  7.  
  8. </ul>
  9. </div>

  (2)在method中定义这个categoryHandler点击事件,

  1. categoryHandler(id){
  2. this.$router.push({name:'photo.list'}, params:{categoryId:id}) //当用户点击之后就会跳转到这个路由,然后再执行beforeRouterUpdate方法
  3.  
  4. },

  (3)执行beforeRouteUpdate方法,重新根据不同路由参数请求数据

  1. beforeRouteUpdate(to, from, next){
  2. //在当前路由改变,但是该组价被复用时调用
  3. //举例来说,对于一个带有动态参数的路径/foo/:id 在/foo/1 和 /foo/2之间跳转的时候
  4. //由于会渲染同样的Foo组件,因此组件实例会被复用。这个钩子在这个时候就会被调用
  5. console.log(to);//to是目的
  6. this.loadImageByCategoryId(to.params.categoryId); //拿到里面的路由参数调用上面封装的请求方法,就会根据不同的数据请求到不同类型的数据
  7. }

操作三:用户可能关闭了当前的网站,然后从浏览器另一个网页中直接拿这个路由来刷新(这个时候路由没有更新)

  (1)用beforeRouteEnter

  1. beforeRouteEnter(to, from, next){
  2. //在渲染该组件的对应路由被confirm前调用
  3. //不能获取组件实例this
  4. //因为当守卫执行前,组件实例还没有被创建
  5. next(vm =>{
  6. vm.loadImageByCategoryId(to.params.categoryId)
  7.  
  8. })
  9. },

结合以上三个操作就可以实现,通过点击不同导航li标签,渲染不同类型的数据, 可以通过在当前网站上输入不同的动态路由参数,渲染不同的数据,还可以从别的网站进来,渲染不同的数据

三、总结

结合以上三个操作就可以实现,通过点击不同导航li标签,渲染不同类型的数据, 可以通过在当前网站上输入不同的动态路由参数,渲染不同的数据,还可以从别的网站进来,渲染不同的数据

Vue(小案例_vue+axios仿手机app)_图文列表实现的更多相关文章

  1. Vue(小案例_vue+axios仿手机app)_图片列表操作

    一.前言 1.让图片还没有被完全加载出来的时候给用户提示                                       2.图片查看器 二.主要内容 1.让图片还没有被完全加载出来的时候 ...

  2. Vue(小案例_vue+axios仿手机app)_购物车(二模拟淘宝购物车页面,点击加减做出相应变化)

    一.前言 在上篇购物车中,如果用户刷新了当前的页面,底部导航中的数据又会恢复为原来的: 1.解决刷新,购物车上数值不变                                         ...

  3. Vue(小案例_vue+axios仿手机app)_购物车

    一.前言 1.购物车 二.主要内容 1.效果演示如下,当我们选择商品数量改变的时候,也要让购物车里面的数据改变 2.具体实现 (1)小球从上面跳到下面的效果 (2)当点击上面的“加入购物车按钮”让小球 ...

  4. Vue(小案例_vue+axios仿手机app)_公共组件(路由组件传参)

    一.前言                    1.公共轮播图的实现                    2.组件传参,公共组件的实现 二.主要内容 1.公共轮播图的实现 (1)分析:当渲染不同的轮 ...

  5. Vue(小案例_vue+axios仿手机app)_上拉加载

    ---恢复内容开始--- 一.前言                                                                                    ...

  6. Vue(小案例_vue+axios仿手机app)_实现用户评论

    一.前言 1.渲染评论列表 2.点击加载按钮,加载更多    3.提交评论 二.主要内容 1.评论列表一般是注册到一个全局的公共组件中 2.请求后台数据,渲染评论列表 (1)数据格式如下 地址 /ap ...

  7. Vue(小案例_vue+axios仿手机app)_首页(底部导航栏+轮播图+九宫格)

    ---恢复内容开始--- 一.前言                        1.底部导航(两种做法)                                         2.轮播图 ...

  8. Vue(小案例_vue+axios仿手机app)_购物车(计算商品总金额)

    一.前言                 1.计算总金额                 2.点击删除按钮,删除对应的商品信息                 3.当还没结算的时候,当用户跳到其他页面 ...

  9. Vue(小案例_vue+axios仿手机app)_Vuex优化购物车功能

    一.前言         1.用vuex实现加入购物车操作 2.购物车详情页面          3.点击删除按钮,删除购物详情页面里的对应商品 二.主要内容 1.用vuex加入购物车 (1)在src ...

随机推荐

  1. 通过Visual Studio 2012 比较SQL Server 数据库的架构变更

    一 需求 随着公司业务的发展,数据库实例也逐渐增多,数据库也会越来越多,有时候我们会发现正式生产数据库也测试数据库数据不一致,也有可能是预发布环境下的数据库与其他数据库架构不一致,或者,分布式数据库上 ...

  2. Threading.Timer用法

    protected System.Threading.Timer executeTimer;//定时器 private int interval;//定时器执行间隔周期 executeTimer = ...

  3. 指定IP地址进行远程访问服务器设置方法(windows系统)

    我们有很多服务器经常受到外界网络的干扰,入侵者们通过扫描3389端口爆破密码非法进入我们的服务器,这时,我们可以配置服务器IP 安全策略来限制一些IP访问,大大提高了服务器的安全. 实验环境:     ...

  4. phpstorm ftp主动模式能连接上,但获取不到目录;

    前面一直都在使用ST做开发,但是也想试试传说中的phpstorm神器.一切都弄好了,想使用它的远程开发功能,省去我本地开发然后再ftp上传做法. 但是却遇到了这个问题,困扰了我三四天!!!我各种百度都 ...

  5. 倒计时js

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Java线程锁,synchronized、wait、notify详解

    (原) JAVA多线程这一块有点绕,特别是对于锁,对锁机制理解不清的话,程序出现了问题也很难找到原因,在此记录一下线程的执行以及各种锁. 1.JAVA中,每个对象有且只有一把锁(lock),也叫监视器 ...

  7. macos 下usb键盘问题.

    Mac 与PC键盘的对比及快捷键(黑苹果) https://www.jianshu.com/p/240f31f6f81a 剩下的就是 系统偏好设置 - 键盘 - 修饰键 - USB键盘(目标键盘) 把 ...

  8. WPF: 自动设置Owner的ShowDialog 适用于MVVM

    原文:WPF: 自动设置Owner的ShowDialog 适用于MVVM 原文地址:http://www.mgenware.com/blog/?p=339 WPF中的Windows的ShowDialo ...

  9. spring @CrossOrigin解决跨域问题

    阅读目录: 一.跨域(CORS)支持: 二.使用方法: 1.controller配置CORS 2.全局CORS配置 3.XML命名空间 4.How does it work? 5.基于过滤器的CORS ...

  10. hdu4746 Mophues (莫比乌斯进阶)

    参考博客:https://blog.csdn.net/acdreamers/article/details/12871643 题意:满足1<=x<=n,1<=y<=m,并且gc ...