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

vue3中watch的使用示例

使用情况说明:

1、父组件中有个表格,点击表格行的修改基础信息,弹出修改对话框;

2、修改内容点击确认,发送请求,后端更新数据;不修改内容不发送请求;

3、可以连续修改;

watch的特点:

1、由子组件watch父组件使用ref定义的对象

// 表格选择行
const tableSelectedRow = ref<ApplyBasicInfo>();

2、tableSelectedRow会涉及重新赋值和修改属性(在页面上修改)

tableSelectedRow.value = row;

3、watch的源是一个getter返回值

() => props.applyBasicInfo

4、开启深度监视

deep: true

父组件相关代码:

script

import { ref } from "vue";
import type { ApplyBasicInfo } from "@/interface";
import ApplyBasicInfoDialog from "./ApplyBasicInfoDialog.vue";// 表格数据
const tableData = ref<ApplyBasicInfo[]>([]);
// 表格选择行
const tableSelectedRow = ref<ApplyBasicInfo>();
// 修改受理基础信息对话框
const applyBasicInfoDialogRef = ref<InstanceType<typeof ApplyBasicInfoDialog>>();
// 渲染修改受理基础信息对话框标识,默认不渲染
const isCreateApplyBasicInfoDialog = ref(false);// 修改基础信息
const onModifyBasicInfoClick = (row: any) => {tableSelectedRow.value = row;// 如果尚未渲染子组件ApplyBasicInfoModifyDialogif (!isCreateApplyBasicInfoDialog.value) {// 标识渲染子组件ApplyBasicInfoModifyDialog,响应式标识的值为真时,满足v-if的条件,开始渲染isCreateApplyBasicInfoDialog.value = true;} else {// 调用子组件的showDialog方法,显示对话框applyBasicInfoDialogRef.value?.showDialog();}
};

template 

<el-table-column label="操作" header-align="center" :align="`center`" fixed="right" width="200"><template #default="scope"><el-button class="btn-slots" type="primary" size="small" plain @click="onModifyBasicInfoClick(scope.row)">修改基础信息</el-button></template></el-table-column><ApplyBasicInfoDialogv-if="isCreateApplyBasicInfoDialog && tableSelectedRow"ref="applyBasicInfoDialogRef":applyBasicInfo="tableSelectedRow"operateCommandType="info-modify" />

子组件相关代码:

 script

import { ref, watch, type PropType } from "vue";
import type { ApplyBasicInfo } from "@/interface";const props = defineProps({applyBasicInfo: {type: Object as PropType<ApplyBasicInfo>, // 使用标准的PropType进行对象类型定义required: true // 表示父组件必须传递这个prop,不能与 default 同时使用},operateCommandType: {type: String,default: "info-view" // 表示当父组件没有传递时使用默认值,不能与 required 同时使用}
});// 对话框显示标识
const dialogVisible = ref(false);
// 监视标识
let applyBasicInfoChanged = false;// 显示对话框
const showDialog = () => {// 显示对话框dialogVisible.value = true;
};watch(() => props.applyBasicInfo, // 点击表格行修改按钮,父组件的tableSelectedRow重新赋值会触发、在对话框中修改内容,修改props.applyBasicInfo(也就是父组件的tableSelectedRow)的属性也会触发() => {// 监视标识,标识 applyBasicInfo 已经发生变化applyBasicInfoChanged = true;},{ deep: true }
);defineExpose({ showDialog });

运行效果:

  


http://www.mrgr.cn/news/97758.html

相关文章:

  • NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)
  • Stable Diffusion + Contronet,调参实现LPIPS最优(带生成效果+指标对比)——项目学习记录
  • 网络协议学习
  • macos下 ragflow二次开发环境搭建
  • ABAP小白开发操作手册+(十)验证和替代——下
  • js异步机制
  • OSPF基础入门篇②:OSPF邻居建立篇-网络设备的“社交礼仪“
  • 程序代码篇---时间复杂度空间复杂度
  • 如何在Dify中安装运行pandas、numpy库(离线、在线均支持,可提供远程指导)
  • OminiAdapt:学习跨任务不变性,实现稳健且环境-觉察的机器人操作
  • MCP协议介绍
  • Spring Security 的核心配置项详解,涵盖认证、授权、过滤器链、HTTP安全设置等关键配置,结合 Spring Boot 3.x 版本最佳实践
  • ruby超高级语法
  • DDoS防御与流量优化
  • Java 开发中主流安全框架的详细对比,涵盖 认证、授权、加密、安全策略 等核心功能,帮助开发者根据需求选择合适的方案
  • [C++面试] 初始化相关面试点深究
  • 【C++】 —— 笔试刷题day_13
  • 解锁ChatGPT-4o文生图潜力:精选提示词收集整理更新中
  • LangChain4j(7):Springboot集成LangChain4j实现知识库RAG
  • dify文本生成图片