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

web前端之vue组件传参、各种传参的不同写法、语法糖

MENU

  • vue2
    • ref+emit
  • vue3
    • 语法糖+ref+emit(一)
    • 语法糖(二)


vue2

ref+emit

子组件

<template><div><el-dialogtitle="新增":visible.sync="dialogFormVisible"@close="handleClose"><el-form :model="form"><el-form-item label="姓名"><el-input v-model="form.name"></el-input></el-form-item><el-form-item label="年龄"><el-input v-model="form.age"></el-input></el-form-item></el-form><div slot="footer"><el-button @click="dialogFormVisible = false">取 消</el-button><el-button type="primary" @click="dialogFormVisible = false">确 定</el-button></div></el-dialog></div>
</template><script>
export default {name: "FormPanel",data() {return {dialogFormVisible: false,form: {name: "",age: "",},};},methods: {/*** 关闭回调*/handleClose() {this.$emit("handleCallback", { id: "6886", type: 2 });},/*** 打开* @param {Object} row 父组件传来参数*/handleOpen(row) {console.log("父组件传来参数", row);this.dialogFormVisible = true;},},
};
</script>

父组件

<template><div><el-button type="primary" @click="handleOpenPanel">新增</el-button><form-panel ref="refFormPanel" @handleCallback="handleCall"></form-panel></div>
</template><script>
import FormPanel from "./components/formPanel.vue";export default {name: "Parent",components: { FormPanel },methods: {/*** 弹窗关闭回调* @param {Object} res 子组件传回参数*/handleCall(res) {console.log("子组件传回参数: ", res);},/*** 通过ref打开弹窗面板*/handleOpenPanel() {this.$refs.refFormPanel.handleOpen({ id: "a1", type: 1 });},},
};
</script>

vue3

语法糖+ref+emit(一)

子组件
html

<template><div><el-dialogv-model="isDialog":title="titleObj[title]"width="50%"append-to-body><el-form :model="dialogForm" label-width="68"><el-row :gutter="10"><el-col :span="12"><el-form-item label="姓名" required><el-inputclass="w_100_"v-model="dialogForm.name"placeholder="请输入姓名"/></el-form-item></el-col><el-col :span="12"><el-form-item label="年龄"><el-inputclass="w_100_"v-model="dialogForm.age"placeholder="请输入年龄"/></el-form-item></el-col></el-row></el-form><el-row class="mt_20"><el-col class="d_f jc_fe" :span="24"><el-button @click="handleCancel">取消</el-button><el-button type="primary" @click="handleSubmit">确认</el-button></el-col></el-row></el-dialog></div>
</template><script name="FormPanel" setup>
// 这个emit很重要
const emit = defineEmits(["handleFormCallback"]);
let info = reactive({isDialog: false,title: "add",titleObj: {add: "新增",edit: "编辑",},dialogForm: {// 名称name: "",// 年龄age: ""},}),{ isDialog, title, titleObj, dialogForm } = toRefs(info);/*** 确认(提交)*/
async function handleSubmit() {console.log("表单数据: ", dialogForm.value);// 提交成功后触发父组件事件emit("handleFormCallback", title);
}
/*** 取消*/
function handleCancel() {isDialog.value = !isDialog;
}
/*** 父组件执行* @param {String} id 行id* @param {String} key 标题类型*/
async function handleOpenFormPanel(id = "", key = "add") {title = key;if (key === "add") {dialogForm.value = {// 名称name: "",// 年龄age: ""};} else {console.log("根据id获取详情: ", id);}nextTick(async () => {isDialog.value = true;});
}// 暴露方法与属性(这个是重点)
// 如果不暴露,则父组件无法执行此函数
defineExpose({handleOpenFormPanel,
});
</script>


父组件

<template><div><el-button type="success" @click="handleAdd('add')">新增</el-button><el-button type="primary" @click="handleEdit('id68', 'edit')">编辑</el-button><!-- 新增/编辑面板 --><form-panel ref="refFormPanel" @handleFormCallback="handleCallback"></form-panel></div>
</template><script name="Parent" setup>
import FormPanel from "./components/formPanel.vue";
const refFormPanel = ref(null);/*** 新增* @param {String} type 面板标题类型*/
function handleAdd(type) {refFormPanel.value.handleOpenFormPanel("", type);
}
/*** 编辑* @param {String} id 行id* @param {String} type 面板标题类型*/
function handleEdit(id, type) {refFormPanel.value.handleOpenFormPanel(id, type);
}
/*** 子组件回调*/
function handleCallback(res = "") {console.log("子组件返回的数据: ", res);
}
</script>

语法糖(二)

http://www.lryc.cn/news/261074.html

相关文章:

  • 基于Nexus搭建Maven私服基础入门
  • JavaScript自执行函数:用途、好处
  • Git使用无法拉取
  • 来聊聊CAS
  • 【EventBus】EventBus源码浅析
  • Buck电源设计常见的一些问题(二)MOS管炸机问题
  • Javascript高频面试题
  • 锁--07_2---- index merge(索引合并)引起的死锁
  • 后端打印不了trace等级的日志?-SpringBoot日志打印-Slf4j
  • 声明式编程Declarative Programming
  • 人工智能与天文:技术前沿与未来展望
  • JeecgBoot 框架升级至 Spring Boot3 的实战步骤
  • 论文阅读——Semantic-SAM
  • gitlab下载,离线安装
  • 【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别
  • conan入门(三十六):在set_version方法中从pom.xml中读取版本号实现动态版本定义
  • 为什么 GAN 不好训练
  • select、poll、epoll 区别有哪些
  • 大模型下开源文档解析工具总结及技术思考
  • 【华为数据之道学习笔记】5-4 数据入湖方式
  • Vue3-03-reactive() 响应式基本使用
  • OpenAI开源超级对齐方法:用GPT-2,监督、微调GPT-4
  • TeeChart.NET 2023.11.17 Crack
  • 计算机网络常见的缩写
  • vue cli 脚手架之配置代理
  • STM32启动流程详解(超全,startup_stm32xx.s分析)
  • 小程序接口OK,桌面调试接口不行
  • 【贪心】LeetCode-406. 根据身高重建队列
  • 【C++11特性篇】C++11中新增的initializer_list——初始化的小利器
  • springboot(ssm宠物美容机构CRM系统 宠物服务商城系统Java系统