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 的观察器直接是一个函数。

结果

成功带出。

相关推荐
军军君011 小时前
Three.js基础功能学习七:加载器与管理器
开发语言·前端·javascript·学习·3d·threejs·三维
哈__1 小时前
React Native 鸿蒙开发:内置 Share 模块实现无配置社交分享
javascript·react native·react.js
JarvanMo1 小时前
情迷服务器驱动 UI:我在 Flutter 开发中的爱与哀愁
前端
tzy2331 小时前
分享一个 HTTP(S) 代理&抓包工具,拦截和Mock Web客户端请求和服务端响应
前端·网络协议·http
代码小学僧1 小时前
普通前端仔的 2025 : 年终总结与 AI 对我的影响
前端·程序员·ai编程
Mike_jia1 小时前
TCP 粘包/拆包问题
前端
沐墨染1 小时前
敏感词智能检索前端组件设计:树形组织过滤与多维数据分析
前端·javascript·vue.js·ui·数据挖掘·数据分析
Kagol1 小时前
🎉TinyPro v1.4.0 正式发布:支持 Spring Boot、移动端适配、新增卡片列表和高级表单页面
前端·typescript·开源
李少兄1 小时前
B/S 架构:现代 Web 应用的核心架构模式
前端·架构·b/s
为自己_带盐1 小时前
在 Blazor Server 中集成 docx-preview.js 实现高保真 Word 预览
javascript·c#·word