vue2中 v-bind="$attrs" 和 $listeners//子组件.vue<template><div><el-button type="primary" @click="dialogVisible = true">点击打开 </el-button><el-dialogv-bind="$attrs"v-on="$listeners" :visible.sync="dialogVisible"width="30%" :before-close="handleClose"><span>这是一段信息</span><span slot="footer" class="dialog-footer"><el-button @click="dialogVisible = false">取 消</el-button><el-button type="primary" @click="dialogVisible = false">确 定</el-button></span></el-dialog></div></template><script>export default {inheritAttrs: false, //不让属性直接渲染在根节点上data() {return {dialogVisible: false};},methods: {handleClose(done) {this.$confirm('确认关闭?').then(() => {done();}).catch(() => { });}}};</script>
文章插图
//父组件.vue<template><div><LianCom title="父组件给的标题" @open="openHandler"></LianCom></div></template><script>import LianCom from "../components/LianCom.vue"export default {components: {LianCom},methods:{openHandler() {console.log('可以直接注册事件 , 因为 v-on="$listeners"会接收除了.native的原生事件')}}}</script>
vue3v-bind="$attrs" 会接收属性和事件//子组件<template><el-button text @click="dialogTableVisible = true"> 打开 </el-button><el-dialog width="600px" v-bind="$attrs" v-model="dialogTableVisible" title="我是标题"><div>我值弹窗中的内容</div></el-dialog></template><script lang="ts">export default {inheritAttrs: false,}</script><script lang="ts" setup>import {ref } from 'vue'const dialogTableVisible = ref(false)</script>ps:我们没有向上抛出任何事件 。但是父组件可以调用 Element Plus 中对话框中的内置方法 。但是父页面中可以 注册 Element Plus 中对话框中的内置方法 。
// 父组件<template><div class="father"><TestCom @close="closeHandler" :before-close="beforeclose" title="父组件给的标题" aa="我是aa" bb="我是bb"></TestCom></div></template><script setup lang="ts">import { ElMessageBox } from 'element-plus'import TestCom from "../../components/TestCom.vue"// Dialog 关闭的回调const closeHandler = () => {console.log('Dialog 关闭的回调')}/*before - close 只会在用户点击关闭按钮或者对话框的遮罩区域时被调用 。如果你在 footer 具名插槽里添加了用于关闭 Dialog 的按钮,那么可以在按钮的点击回调函数里加入 before - close 的相关逻辑 。关闭前的回调,会暂停 Dialog 的关闭. 回调函数内执行 done 参数方法的时候才是真正关闭对话框的时候.*/const beforeclose = (done: () => void) => {ElMessageBox.confirm('Are you sure to close this dialog?').then(() => {console.log('用户点击了确定')done()}).catch(() => {console.log('用户点击了取消')})}</script>
文章插图
推荐阅读
- 原神绿剑抽要不要抽
- 天玑810跑分多少分_天玑810跑分详情
- DevOps|从特拉斯辞职风波到研发效能中的不靠谱人干的荒唐事
- 地下城堡3:魂之诗桶中人之国怎么通关
- 河南移动卡套餐 移动卡套餐一览表
- 跃迁旅人刺客队怎么样
- 原神红绸怎么速刷
- flutter系列之:flutter中可以建索引的栈布局IndexedStack
- apk文件怎样在电脑中打开(apk.1文件手机怎么打开)
- 跃迁旅人商店中哪些道具值得购买