vue父子组件传值不能实时更新

这篇具有很好参考价值的文章主要介绍了vue父子组件传值不能实时更新。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近做项目,遇到个大坑,这会爬出来了,写个总结,避免下次掉坑。

vue父子组件传值不能实时更新问题,父组件将值传给了子组件,但子组件显示的值还是原来的初始值,并没有实时更新,为什么会出现这种问题呢?

出现这个问题,可能有以下两个原因:

一、 父组件没有把值传过去,子组件没有获取到最新的值。

二、子组件接收到最新的值了,但是没有实时渲染到视图上。

如果是第一种情况很简单,核对传的参数,确保把最新的值传过去就可以了。

若是第二种情况,稍微有些麻烦,但也可以解决,主要有两种解决方案:

① 利用v-if的重新渲染机制,获取到值之后,将子组件重新渲染一遍。

② 利用watch监听数据,若是数据变化,调用视图渲染方法。

下面,结合项目的实际情况,具体分析这两种方法。

在项目中,将erchart中的生成仪表盘的数据封装了一个子组件,父组件中传给仪表盘一个初始值,后续,调用后台接口返回最新的数据传给这个仪表盘组件的之后,发现仪表盘中的数据并没有实时的更新。仪表盘如下图:

vue父组件数据变化了,子组件视图没更新,vue,vue.js,javascript,vue父子传值不实时更新,watch深度监听

 首先,利用第①种方法,利用v-if渲染机制

设置一个参数reRender。设置v-if=“reRender”,并将reRender初始值设置为false,从后台获取数据之后,将reRender=true。

这样就能够将最新的数据渲染到子组件的视图中了。但这样,如果我在同一个页面中调用了很多次这个子组件,生成多个仪表盘,就需要设置很多个类似于reRender的属性。

那么有的小可爱就提出来了,我设置一个reRender属性,然后几个子组件共用这个属性不就可以了吗,几个后台接口调完更新数据之后在统一将reRender=true。

这种方法,我尝试过了,不可以,我不知道原因。

只有将reRender=true放在那个调接口的方法里,获取到后台数据之后,才可以。尝试了网上提出的强制更新的方法,也不行。

所以,遇到这种一个页面调用多个这种组件的情况,使用v-if就很繁琐。

若是,别人封装了这么一个组件,数据更新的时候还要利用v-if重新渲染一下,那就感觉这个组件可能封装的不是太好,所以,咱们还是完善子组件。

这里就涉及到了第二种方法,设置watch监听,监听数据,当子组件监听到数据发生改变时,调用方法。

监听传的数据,这里面用到了两个属性immediate和deep,在watch中,不会监听初始值,只有当值改变时才会执行handler函数。但是,我们想要在最初赋值的时候,也执行handler函数,就需要用到immediate:true。而普通监听只能监听字符串、数字等值,要想监听到对象中某个属性的变化,就需要用到深度监听deep:true

vue父组件数据变化了,子组件视图没更新,vue,vue.js,javascript,vue父子传值不实时更新,watch深度监听

 在这之后,我发现控制台报错了, ”TypeError: Cannot read property ‘getAttribute’ of undefined”,如下所示:

vue父组件数据变化了,子组件视图没更新,vue,vue.js,javascript,vue父子传值不实时更新,watch深度监听

 后面查了一些资料是因为:在vue中,数据和dom渲染是异步的,当dom还没渲染,却用数据去赋值的话,就会出现这个问题。解决方法是:利用this.$nextTick()。this.$nextTick()将数据渲染方法放到dom渲染之后,这样就不会出现这个问题了。

vue父组件数据变化了,子组件视图没更新,vue,vue.js,javascript,vue父子传值不实时更新,watch深度监听

 依此,子组件数据就可以实时更新了。如下图:

vue父组件数据变化了,子组件视图没更新,vue,vue.js,javascript,vue父子传值不实时更新,watch深度监听文章来源地址https://www.toymoban.com/news/detail-596660.html

到了这里,关于vue父子组件传值不能实时更新的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端学习记录】vue中使用el-upload组件时,上传文件进度条没有实时更新

    问题背景 今天在项目中遇到一个问题,使用el-upload组件时,上传文件进度条没有实时更新,需要手动点击一下才会更新。 原理及可尝试方案 el-upload 组件默认的进度条是通过 Ajax 请求上传文件,并且进度条通过监听 xhr.upload 的 progress 事件来实时更新。但是,有些浏览器在处

    2024年02月01日
    浏览(52)
  • 【修改完Qt的UI界面再运行却不能实时更新的解决方法】

    如博客标题所述。例如:当我们在ui界面中添加了某个控件(如按钮)之后,右键项目名称点击运行(对应绿色右三角),显示的界面却还是原来未修改的界面。 这个问题在网上已经有很详细的解释了。具体地,首先需要明白,在我们更改完ui界面、点击运行之后将会重新产

    2024年02月12日
    浏览(43)
  • vue3 父子组件传值 记录

    最近这个组件之间传值用的较多,我这该死的记性,总给忘记写法,特此记录下 补充:LeftView.vue 是父组件; Video.vue 是子组件 Video.vue 子组件 LeftView.vue 父组件 第一步 创建bus.js文件 第二步 分别在需要相互传参的组件中引入bus.js文件,并相互传参

    2024年02月11日
    浏览(42)
  • vue父子组件之间传值的方法

    父传子 方式: props 效果: 把父组件的 fatherName 属性传入子组件,在子组件中使用 父组件代码: 子组件代码: 子传父 方式: $emit 效果: 在子组件触发事件,修改父组件的fatherName属性 父组件代码: 子组件代码: 兄弟传值 方式: eventBus.js 效果: 任意组件之间相互传值 代

    2024年02月09日
    浏览(43)
  • Vue3 TS写法 父子组件传值(通讯)

    父组件: 子组件: 通过defineProps来接受数据(无须引入直接使用即可) 子组件可写默认值也可以不写两种情况 子组件通过defineEmits派发一个事件 (一样无须引入直接使用即可)  父组件接受子组件的事件 chilFun

    2024年02月15日
    浏览(38)
  • vue父子组件传值(v-model)

    子组件使用 props 接收父组件传来的值 1)这里有个大坑, el-dialog 中一定要用 model-value 来代替 v-model ,不能用 v-model ,否则会报错 (2)子组件中修改父组件传入的参数 visible 时,使用 👇方式

    2024年02月11日
    浏览(42)
  • vue 热更新不生效?页面没实时刷新解决办法

            检查页面的路由地址是否有误,尤其是 字母大小写 比如上图,大小写写错了页面并不会报错,但是热更新会失效。  

    2024年01月24日
    浏览(38)
  • 前端大屏数据实时更新

    在页面中使用  setInterval  每隔几秒去获取一下数据。伪代码如下: 一般不建议这样使用,因为会给页面造成性能问题。 使用  websocket 如果使用 websocket 纯前端无法独立完成,需要 后台  配合提供相应的接口。 使用 SSE(Server-Sent Events) , 纯前端无法独立完成,需要 后台  配

    2024年02月05日
    浏览(61)
  • vue3 使用 mitt 插件实现非父子组件传值

    介绍 : mitt 是一个 JavaScript 库,用于实现事件的订阅和发布 1、安装 2、新建 utils/eventBus.ts 文件 3、使用

    2024年02月09日
    浏览(48)
  • Python如何随数据更新实时画图?Python实时动态绘图

    在数据分析和可视化场景中,我们常常需要实现实时动态图表,比如每分钟读取数据库新的记录,及时更新图表显示最新数据,而不是静态显示某个时间点的数据。本文将介绍使用Python matploblib库的animation功能实现实时动态绘图的方法。 问题背景 我们有一个Excel表,其中记录

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包