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

湛江网站设计公司今日全国疫情最新消息

湛江网站设计公司,今日全国疫情最新消息,世界互联网峰会互联网之光,沈阳世纪兴网站制作公司之前 Vue3 只停留在理论&#xff0c;现在项目重构&#xff0c;刚好可以系统的实战一下&#xff0c;下面是封装了一个抽屉表单组件&#xff0c;直接在父组件中通过调用子组件的方法打开抽屉&#xff1a; 父组件&#xff1a; <template><div id"app"><…

之前 Vue3 只停留在理论,现在项目重构,刚好可以系统的实战一下,下面是封装了一个抽屉表单组件,直接在父组件中通过调用子组件的方法打开抽屉:

父组件:

<template><div id="app"><div @click="getChildValue">open</div><custom-formref="childRef":fields="fields":form="form":rules="rules":saveForm="saveForm"></custom-form></div>
</template><script setup>
import CustomForm from "@/components/CustomModelForm";
import { reactive } from "vue";const formData = reactive({form: {name: "",email: "",date: "",password: "",},fields: [{prop: "name",label: "Name",component: "el-input",props: { placeholder: "Enter your name" },},{prop: "email",label: "Email",component: "el-input",props: { placeholder: "Enter your email" },},{prop: "date",label: "Date",component: "el-date-picker",props: {placeholder: "Enter your date",format: "YYYY-MM-DD",valueFormat: "YYYY-MM-DD",},},{prop: "password",label: "Password",component: "el-input",props: { placeholder: "Enter your password", type: "password" },},],rules: {name: [{ required: true, message: "Please input your name", trigger: "blur" },],email: [{ required: true, message: "Please input your email", trigger: "blur" },],password: [{required: true,message: "Please input your password",trigger: "blur",},],},
});
const { form, fields, rules } = toRefs(formData);
const childRef = ref(null);function getChildValue() {childRef.value?.open();
}function saveForm() {console.log(form.value);
}
</script>

子组件:

<template><el-drawerv-model="drawer":title="title":size="width":before-close="resetForm"><el-form :model="form" :rules="rules" ref="customForm" label-width="auto"><el-form-itemv-for="field in fields":key="field.prop":label="field.label":prop="field.prop"><component:is="field.component"v-bind="field.props"v-model="form[field.prop]"/></el-form-item></el-form><template #footer><div style="flex: auto"><el-button type="primary" @click="submitForm">保存</el-button><el-button @click="resetForm">取消</el-button></div></template></el-drawer>
</template><script setup>
const props = defineProps({// 抽屉标题title: {type: String,default: "标题",},// 表单元素 JSONfields: {type: Array,required: true,},// 表单数据form: {type: Object,required: true,},// 表单校验规则rules: {type: Object,default: () => ({}),},// 设置抽屉宽width: {type: String,default: "30%",},// 保存表单方法saveForm: {type: Function,default: () => {},},
});const drawer = ref(false); // 控制抽屉显隐
const customForm = ref(null); // 表单 ref// 提交表单
const submitForm = () => {customForm.value.validate((valid) => {if (valid) {props.saveForm();resetForm();} else {console.log("error submit!!");return false;}});
};// 打开抽屉
function open() {drawer.value = true;
}// 关闭抽屉
const resetForm = () => {customForm.value.resetFields();drawer.value = false;
};defineExpose({open,
});
</script>

这里主要用来 ref 和 defineExpose,其中 ref 获取了子组件的实例,而 defineExpose 是一个用于在 <script setup> 语法糖中暴露组件内部的属性或方法给父组件的函数。通过使用 defineExpose,你可以控制哪些属性和方法可以被外部访问,从而增强组件的封装性和安全性。

http://www.khdw.cn/news/27377.html

相关文章:

  • 专业网站建设机构企业为何选择网站推广外包?
  • 做公司网站视频seo策略分析
  • 做图片可以卖给那些网站成都关键词优化平台
  • 快速网站建设多少钱想找搜索引擎优化
  • 昆明微信网站建设跨境电商
  • 英文网站建设南宁网站推广营销
  • 有哪些网站是可以做免费推广的网络营销策略理论
  • 个人主页网站设计代码东莞seo排名外包
  • 学网站开发培训机构网站托管维护
  • 手机购物网站制作济南网络优化网站
  • web开发不只是做网站网站排名工具
  • 做个网站大约多少钱厦门seo推广公司
  • 表格如何给网站做链接地址免费个人网站模板
  • wordpress个性404上海搜索引擎优化seo
  • 宁波网站建设开发公司慈溪seo
  • 短视频制作神器优化seo教程技术
  • 网站建设和网络优化请示国内十大软件培训机构
  • 织梦cms仿某作文网站整站源码(带采集)安装数据库b2b网站大全免费
  • 网站服务器搭建的步骤网站编辑seo
  • 做网站的模版nba最新新闻消息
  • 做网站专题怎样添加微博什么是seo和sem
  • 织梦手机网站怎么做大连seo网站推广
  • 网站重构div css论文西安seo服务
  • 网站优化怎么做 有什么技巧免费下载app并安装
  • 地方门户网站运营网络推广计划书范文
  • 手机非法网站怎么解决方案凡科建站收费价目表
  • 游戏推广赚佣金seo排名优化资源
  • 张家港市做网站的公司宣传软文案例
  • 怎样清除单位域名 网站或互联网网址关键词搜索优化外包
  • wordpress theme o'connor关键词优化快排