Vue-观察器(watch)的定义方式引发组件初始值没有渲染成功问题(已解决)

问题描述:在测试环境发现一个问题,打开一张表单的时候,所有字段都成功赋上了值,唯独一个人员组件的值(出差人员)没有带出,而接口返回的数据是正常的,也就是说不是后端接口的问题,是前端组件渲染过程中出了差错。值得一提的是,出差人员这个字段是依据前面字段("出版完成送出方式")的值来动态生成的,只有其值为"出差人员带出",那么"出差人员"这个字段才会生成。

以上就是背景。

在前端调试的过程中逐步发现,当代码走到给"出版完成送出方式"赋完值后,尽管后面的"出差人员"已经生成,但是代码却直接结束了,不给它赋值了。那么到这里问题可能就出在这个人员组件上了。查看人员组件的监听代码,发现:

原本的定义:

javascript 复制代码
watch: {  
    value: function () {  
        // ... 处理逻辑  
    }
},

特点

  1. value 观察器定义方式 :在这里,value 的观察器直接是一个函数,而不是一个对象。这意味着这个观察器不会在组件创建后立即执行(除非 value 在创建后发生了变化)。

好了,知道问题所在,就修改:

修改后的代码:

javascript 复制代码
watch: {  
    value: {  
        handler() {  
            // ... 处理逻辑  
        },  
        immediate: true,  
    }
},

特点

  1. value 观察器定义方式value 的观察器是一个对象,其中 handler 是处理函数,immediate: true 表示在组件创建后立即执行一次这个观察器(而不仅仅是当 value 变化时)。

差异总结

这两段代码都是 Vue 组件中的 watch 选项,用于观察特定数据属性的变化并执行相应的操作。但是,它们之间存在一些差异,主要是关于 value 的观察器(watch)的定义方式。

  1. 执行时机 :第二段代码中,value 的观察器会在组件创建后立即执行一次(由于 immediate: true),而第一段代码中的 value 观察器则不会。
  2. 定义方式 :第二段代码中,value 的观察器是一个对象,包含了 handler 函数和 immediate 选项;第一段代码中,value 的观察器直接是一个函数。

结果

成功带出。

相关推荐
米丘14 分钟前
Vite 开发服务器启动时,如何将 client 注入 HTML?
javascript·node.js·vite
一 乐19 分钟前
饮食营养信息|基于springboot + vue饮食营养管理信息平台系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·饮食营养管理信息系统
军军君0121 分钟前
数字孪生监控大屏实战模板:空气污染监控
前端·javascript·vue.js·typescript·前端框架·echarts·数字孪生
m0_6948455721 分钟前
opendataloader-pdf部署教程:构建PDF数据处理系统
服务器·前端·前端框架·pdf·开源
小李子呢021127 分钟前
前端八股浏览器网络(1)---响应头
前端
米丘27 分钟前
vite 插件 @vitejs/plugin-vue
javascript·node.js·vite
冰暮流星27 分钟前
javascript之DOM更新操作
开发语言·javascript·ecmascript
倚栏听风雨28 分钟前
详细讲解下 for...of vs for await...of 区别
前端
REDcker29 分钟前
Safari 26.4 新增 WebTransport:对 iOS WebView 的影响与落地建议
前端·ios·safari
练习前端两年半30 分钟前
Vue3 KeepAlive 深度揭秘:组件缓存的魔法是如何实现的?
前端·vue.js·面试