广告
返回顶部
首页 > 资讯 > 精选 >vue获取v-for异步数据dom问题怎么解决
  • 598
分享到

vue获取v-for异步数据dom问题怎么解决

2023-07-05 15:07:41 598人浏览 八月长安
摘要

这篇文章主要讲解了“Vue获取v-for异步数据dom问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue获取v-for异步数据dom问题怎么解决”吧!vue获取v-for异步数

这篇文章主要讲解了“Vue获取v-for异步数据dom问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue获取v-for异步数据dom问题怎么解决”吧!

    vue获取v-for异步数据dom

    问题描述

    每次加载界面时,在 mounted阶段,只能获取普通dom(指静态渲染的dom),获取不到v-for的dom,尽管使用$nextTick也获取不到,虽然使用setTimeOut能解决,但这种方法真的很low,作为程序员要追求完美,下面我们看看怎么完美解决这个问题。

    原因

    在v-for里的数据是异步获取的,里面的id或者class也都是动态绑定的,而mounted阶段只是实例挂载完成,这时候异步请求的数据大概率还没请求完成,从而v-for要渲染的dom肯定也还没开始渲染,这时候连异步请求的数据都获取不到,更别说需要异步数据来渲染的dom了。

    $nextTick是指整个视图渲染完成,注意这里不包含异步请求的数据,在整个视图渲染完成时异步数据未必能请求到。所以调用$nextTick其实也没什么两样。

    解决思路及方案

    第一种并不是很完美的方案:使用updated钩子

    updated 阶段是完成了数据更新到 DOM 的阶段(对加载回来的数据进行处理),此时,在使用document等获取dom是可以得到的。

    updated 与 mounted 不同的是,在每一次的 DOM 结构更新,vue.js 都会调用一次 updated 钩子函数!而 mounted 钩子函数仅仅只执行一次而已。

    但是,本人不推荐这么做,因为如果项目中数据更新很频繁,虚拟dom也会跟着经常更新,如果在updated中获取dom,会造成操作过于频繁的问题,也就会多多少少影响程序性能。在vue官方也有提到。

    vue获取v-for异步数据dom问题怎么解决

    完美解决的方案:在异步数据获取完成时调用$nextTick获取dom

    想获取异步请求数据渲染的dom就一定得等到数据接收到后再进行相应的操作。而有同学就问了,为什么在获取到数据后还要调$nextTick呢?

    因为获取到数据之后v-for去动态渲染dom肯定也是需要一定时间的,不可能马上就能渲染完成,所以在获取到异步数据之后再等整个视图渲染完成时去获取dom是最好的选择。

    那要在created或者mounted或者在watch中获取就看个人选择了。

    created或者mounted中需要在获取完数据后在then或者await接受返回的数据再调用$nextTick获取dom,在watch中就直接监视请求的数据,数据改变就说明获取到了,就可以调用$nextTick获取dom了。

    vue获取DOM问题

    利用 ref 和 $refs 可以用于获取 dom 元素

    <h2 id="h" ref="myH">我是一个孤独可怜又能吃的h2</h2> mounted() {    console.log(document.getElementById("h"));    console.log(this.$refs.myH);  },

    使用ref调用组件内的方法。

    <Demo ref="de"></Demo> import Demo from "./child/demo"; //组件起别名reflet demoObj = this.$refs.de;//可以以此调用组件内的方法,变量等    demoObj.fn();

    $nextTick使用

    如果我们修改某个出现在DOM里的变量,之后又要获取DOM里的变量值,那么会发现DOM里变量值并未修改成功,因为Vue更新DOM是异步的,用$nextTick解决。

    因为vue 通过异步队列控制 DOM 更新和 nextTick 回调函数先后执行。

    <p ref="myP">{{ count }}</p><button @click="btn">点击count+1, 马上提取p标签内容</button> btn() {      this.count++; // vue监测数据更新, 开启一个DOM更新队列(异步任务)      console.log(this.count) //1      //因为Vue更新DOM是异步的,所以count虽然完成加一,但这里的DOM还未更新。      console.log(this.$refs.myP.innerhtml); // 0       // 解决: this.$nextTick()      // 过程: DOM更新完会挨个触发$nextTick里的函数体      this.$nextTick(() => {        console.log(this.$refs.myP.innerHTML); // 1      });       //方法二: async 函数执行时, async btn(){}      //如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,      //恢复 async 函数的执行并返回解析值      await this.$nextTick()      this.$refs.myP.innerHTML  },

    组件name属性使用 

    我们封装的组件-可以自己定义name属性组件名-让使用者有个统一的前缀风格

    给组件(Demo)起个名字,用组件的name属性值, 来注册组件名字

    export default {  name: "Mmm",}

    之后就可以用Mmm当作标签使用

    import Demo from "./child/demo"; components: {    // Demo,    [Demo.name]: Demo,  },

    感谢各位的阅读,以上就是“vue获取v-for异步数据dom问题怎么解决”的内容了,经过本文的学习后,相信大家对vue获取v-for异步数据dom问题怎么解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: vue获取v-for异步数据dom问题怎么解决

    本文链接: https://www.lsjlt.com/news/353077.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • vue获取v-for异步数据dom问题怎么解决
      这篇文章主要讲解了“vue获取v-for异步数据dom问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue获取v-for异步数据dom问题怎么解决”吧!vue获取v-for异步数...
      99+
      2023-07-05
    • vue获取v-for异步数据dom的解决问题
      目录vue获取v-for异步数据dom问题描述原因解决思路及方案vue获取DOM问题$nextTick使用组件name属性使用 总结vue获取v-for异步数据dom 问题...
      99+
      2023-03-24
      vue获取v-for异步数据dom vue v-for v-for异步数据dom
    • 怎么解决vuejs获取不到dom问题
      这篇文章主要介绍“怎么解决vuejs获取不到dom问题”,在日常操作中,相信很多人在怎么解决vuejs获取不到dom问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决vuejs获取不到dom问题”的疑...
      99+
      2023-06-25
    • vue怎么解决this.$refs.xx在mounted中获取DOM元素为undefined问题
      今天小编给大家分享一下vue怎么解决this.$refs.xx在mounted中获取DOM元素为undefined问题的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文...
      99+
      2023-07-05
    • vue-resource 获取本地json数据404问题的解决
      目录vue-resource 获取本地json数据404什么是vue-resource?vue-resource 获取本地json数据404 在使用vue-cli搭建的vue项目中,...
      99+
      2022-11-13
      vue-resource 获取本地json数据 获取本地json 404
    • Vue的异步渲染axios问题怎么解决
      本文小编为大家详细介绍“Vue的异步渲染axios问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue的异步渲染axios问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Vue异步渲染ax...
      99+
      2023-07-05
    • vue三级数据获取不到怎么解决
      Vue是一个非常流行的JavaScript框架,用于构建用户界面。在Vue开发中,三级数据获取是一个常见的问题。如果你遇到了Vue三级数据获取不到的问题,不要担心,下面我将为您提供几个解决方案。使用递归组件递归组件是指组件在它自己的模板中调...
      99+
      2023-05-14
    • mybatis plus新增数据获取主键id的问题怎么解决
      这篇文章主要介绍了mybatis plus新增数据获取主键id的问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mybatis plus新增数据获取主键id的问题怎么解决文章都会有...
      99+
      2023-07-05
    • vue异步组件与组件懒加载问题怎么解决
      本篇内容主要讲解“vue异步组件与组件懒加载问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue异步组件与组件懒加载问题怎么解决”吧!vue异步组件与组件懒加载在写项目的时候,需要动...
      99+
      2023-06-29
    • vue awesome swiper异步加载数据出现的bug问题怎么办
      这篇文章主要介绍vue awesome swiper异步加载数据出现的bug问题怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本人第一次使用vue awesome。轮播第二次之...
      99+
      2022-10-19
    • Vue数组中出现__ob__:Observer无法取值问题怎么解决
      这篇文章主要介绍了Vue数组中出现__ob__:Observer无法取值问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue数组中出现__ob__:Observer无法取值问题怎么解决文章都会有所收...
      99+
      2023-06-29
    • MySQL主从数据库同步延迟问题怎么解决
      这篇文章主要讲解了“MySQL主从数据库同步延迟问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL主从数据库同步延迟问题怎么解决”吧!My...
      99+
      2022-10-18
    • vue数据变化但页面刷新问题怎么解决
      今天小编给大家分享一下vue数据变化但页面刷新问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。vue数据变化但页面...
      99+
      2023-06-30
    • 怎么解决IE下jquery ajax无法获得最新数据的问题
      本篇内容主要讲解“怎么解决IE下jquery ajax无法获得最新数据的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决IE下jquery ajax无...
      99+
      2022-10-19
    • springboot数据库查询时出现时区差异问题怎么解决
      今天小编给大家分享一下springboot数据库查询时出现时区差异问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
      99+
      2023-07-04
    • 怎么解决数据库的Incorrect integer value: '' for column 'RegNum' at row 1问题
      本篇内容主要讲解“怎么解决数据库的Incorrect integer value: '' for column 'RegNum' at row 1问题”,感兴趣的朋友不妨来看...
      99+
      2022-10-19
    • vue怎么解决数据加载时插值表达式闪烁的问题
      vue怎么解决数据加载时插值表达式闪烁的问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。数据加载,插值表达式闪烁问题1.在公共的css样式中加入[v-cloak] ...
      99+
      2023-06-28
    • Vue怎么解决router传递params参数在页面刷新时数据丢失问题
      本文小编为大家详细介绍“Vue怎么解决router传递params参数在页面刷新时数据丢失问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么解决router传递params参数在页面刷新时数据丢...
      99+
      2022-10-19
    • vue父组件数据更新子组件相关内容未改变问题怎么解决
      这篇文章主要介绍“vue父组件数据更新子组件相关内容未改变问题怎么解决”,在日常操作中,相信很多人在vue父组件数据更新子组件相关内容未改变问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue父组...
      99+
      2023-06-29
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作