当前位置: 首页 > news >正文

VUE项目学习笔记 v-for绑定数据,该数据异步获取,同时需要对v-for的DOM节点进行js操作

问题描述:

项目里有一个轮播图,轮播图的图片数据从服务器获取,用v-for生成DOM在页面中显示,轮播图插件会通过new Swiper给DOM添加CSS、事件等,实现轮播效果。

在这里存在操作顺序问题:当服务器返回图片数据后,需要更新数据。数据更新后,v-for根据数据先加载完毕,轮播图插件swiper再通过new Swiper操作DOM,否则轮播效果不会起效。

v-for生成DOM:

            <div class="center"><div class="swiper-container" ref="mySwiper"><div class="swiper-wrapper"><div class="swiper-slide" v-for="imagesData in imagesList" :key="imagesData.id"><img :src="imagesData.imgUrl"></div></div><div class="swiper-pagination"></div><div class="swiper-button-prev"></div><div class="swiper-button-next"></div></div></div>

异步请求数据:

this.$store.dispatch('Home/getBannerList');//store语句const mutations = {setBannerList(state, data){state.bannerList = data;}
};const actions = {async getBannerList(context){let bannerData = await requestBannerImage();bannerData = bannerData.data;context.commit('setBannerList',bannerData);}
};

Swiper操作DOM:

            let mySwiper = new Swiper('.swiper-container', {//开启循环模式loop: true,// 如果需要分页器pagination: {el: '.swiper-pagination',},// 如果需要前进后退按钮navigation: {nextEl: '.swiper-button-next',prevEl: '.swiper-button-prev',},});

把逻辑处理放在mounted钩子中,存在的问题:由于请求是异步获取,在mounted中虽然其他DOM已经加载,但是数据还未完全返回,因此v-for还未执行完毕,相当于v-for的加载也是异步的。new Swiper时,v-for的DOM还未生成,因此对DOM操作无法生效。

解决方案:

使用nextTick()

简单介绍nextTick(回调函数):等待下一次 DOM 更新刷新的工具方法。

当页面中DOM发生变化时,并不会马上更新页面,而是把修改推入队列,再统一处理。

nextTick()执行后,可以让推入队列中的DOM修改生效。nextTick中的回调会在修改生效后执行。

用watch()监听列表数据的改变,列表数据改变后,用nextTick推到DOM上,再用Swiper操作DOM。

watch:{List:{handler(newValue, oldValue){this.$nextTick(()=>{... = new Swiper()})}}
}

http://www.dtcms.com/a/285426.html

相关文章:

  • 苍穹外卖项目日记(day12)
  • Linux驱动学习day24(UART子系统)
  • AI产品经理面试宝典第36天:AI+旅游以及行业痛点相关面试题的指导
  • Python爬虫实战:研究opengraph库相关技术
  • linux 的list_for_each_entry
  • 【c++】STL-容器 list 的实现
  • 20250718-2-Kubernetes 应用程序生命周期管理-Pod对象:基本概念(豌豆荚)_笔记
  • [AI8051U入门第五步]modbus_RTU主机
  • 怎么把图片做成实拍的感觉?给图片加上拍摄时间,相机信息等就可以了
  • PostgreSQL 16 Administration Cookbook 读书笔记:第7章 Database Administration
  • 如何下载并安装AIGCPanel
  • 设计模式五:桥模式(Bridge Pattern)
  • charles雷电模拟器抓包教程
  • 大数据时代下的时序数据库选型指南:基于工业场景的IoTDB技术优势与适用性研究
  • CCF编程能力等级认证GESP—C++2级—20250628
  • 张力场中的领航者:驾驭二元对立的“情境智慧”模型
  • UVC for USBCamera in Android - 篇二
  • HAL库的串口
  • Vite/Vue 项目 | 开发环境指定Host(允许其它电脑访问)
  • uniapp+vue2——自定义底部导航tabbar
  • STC89C52系列单片机内部结构详解
  • 我用EV-21569-SOM评估来开发ADSP-21569(八)-UART串口例程
  • 基于单片机的点阵式汉字电子显示屏的设计
  • Vue3 业务落地全景:脚手架、权限、国际化、微前端、跨端与低代码 50 条实战心法
  • 基于单片机的便携太阳能光伏系统研究
  • 基于单片机金沙河粮仓环境监测系统设计与实现
  • stm32驱动双步进电机
  • 第三章第四节 按键控制光敏传感器控制蜂鸣器
  • LeetCode|Day18|20. 有效的括号|Python刷题笔记
  • 格式转换Total Excel Converter:20 种格式XLS XLSX 批量转 PDFWord