vue + elementUI 封装Dialog功能 功能中实现父子传参以及子调用父的函数 并且实现vue中prop的双向数据绑定

使用场景:项目中多次使用Dialog功能然后就封装了一个组件,主要是给用户再次确认,以及提示的功能的功能

1.先创建一个子组件主要内容就是DIalog组件的代码,其中有几个可以通过父组件传的变量 

isShowDialog:控制是否显示,也是需要实现双向数据绑定的变量
content:Dialog对话框的主要内容
titleText:对话框的标题
cancelText:取消按钮的文字,可以默认不传
confirmText:确认按钮的文字,可以默认不传
<template>
    <el-dialog
            :title="titleText"
            :visible.sync="showDialog"
            width="30%"
         >
        <span>{{content}}</span>
        <span slot="footer" class="dialog-footer">
    <el-button @click="childOperation('cancel')">{{cancelText}}</el-button>
    <el-button type="primary" @click="childOperation('confirm')">{{confirmText}}</el-button>
  </span>
    </el-dialog>
</template>

<script>
    export default {
        name: "confirmDialog",
        props:{
            isShowDialog: {
                type:Boolean,
                default:true
            },
            content:{
                type:String,
                default:'这是一段信息'
            },
            titleText:{
                type:String,
                default:'提示'
            },
            cancelText:{
                type:String,
                default:'取 消'
            },
            confirmText:{
                type:String,
                default:'确 认'
            }
        },
        data() {
            return {
               showDialog:this.isShowDialog
            };
        },
        created(){
            console.log(this.isShowDialog);
        },
        methods: {
            childOperation(value) {
                this.$emit('child-operation',value);
            }
        },
        watch: {
            isShowDialog(val) {
                this.showDialog = val;//②监听外部对props属性result的变更,并同步到组件内的data属性myResult中
            },
            showDialog(val){
                this.$emit("on-result-change",val);//③组件内对myResult变更后向外部发送事件通知
            }
        },
    }
</script>

<style scoped>

</style>

2.父组件的主要代码以及使用说明

<template>
 <div id="ServeManage" class="page">

    <el-button type="primary" @click="isShowDialog = true">删除</el-button>
    <confirmDialog :isShowDialog="isShowDialog" content="请确认是否要删除服务内容管理" @on-result-change = "changeIsShowDialog" @child-operation="operation">
    </confirmDialog>
    </div>
  </div>
        
</template>
    import confirmDialog from '../../components/ConfirmDialog.vue'  //组件放在的位置 根据实际修改
    export default {
        name: "ServeManage",
        data(){
            return{
                  isShowDialog:false,
            }
        },
        components: {
          confirmDialog  //引入组件
        },

        methods: {
          operation(type){
            if(type=="confirm"){
             //点击确认要执行的代码
              this.isShowDialog=false;
            }else if (type=='cancel'){
             //点击取消要执行的代码
            }
          },
          changeIsShowDialog(val){
            this.isShowDialog=val;  //监听变化时触发的函数修改父组件的是否显示状态
          }
        }
    };

 

Vue + Element UI中,如果你想在打开的Dialog中使用Lodop打印其内容,你可以按照以下步骤进行操作: 1. **引入Lodop组件**: 首先确保你在Vue项目中已经安装了`vue-lodop`插件,如果还没有,参考上一个问题中的安装步骤。 2. **在Dialog中使用Lodop**: 创建一个自定义的Dialog组件,包含一个隐藏的Lodop实例。当你需要打印内容时,通过计算属性或方法获取Dialog的内容,并将其赋值给Lodop的打印区域。 ```html <!-- dialog.vue --> <template> <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" size="medium"> <div ref="printArea">{{ printContent }}</div> <!-- 这里是你要打印的内容 --> <span slot="footer" class="dialog-footer"> <el-button @click="handlePrint">打印</el-button> <el-button @click="cancel">取消</el-button> </span> </el-dialog> </template> <script> export default { name: 'CustomDialog', props: { dialogTitle: String, printContent: { // 从组件传入要打印的内容 type: String, default: '', }, }, data() { return { dialogVisible: false, lodopInstance: null, // 初始化Lodop实例 }; }, mounted() { this.initLodop(); }, methods: { initLodop() { this.lodopInstance = new window.Lodop(); // 初始化Lodop // 添加其他必要的Lodop配置,例如设置打印纸张、布局等 }, handlePrint() { if (!this.lodopInstance) { this.initLodop(); } this.printContent && this.lodopInstance.printHtml(this.printContent); // 打印指定内容 this.dialogVisible = false; // 关闭Dialog }, cancel() { this.dialogVisible = false; }, }, }; </script> ``` 3. **在组件中使用Dialog**: 在需要打印的地方展示`CustomDialog`,并将要打印的数据传递进去: ```html <template> <el-container> <el-header>Header</el-header> <el-main> <custom-dialog v-model="dialogVisible" :dialog-title="dialogTitle" :print-content="toPrintContent" /> <!-- 将要打印的文本作为prop传递 --> </el-main> </el-container> </template> <script> import CustomDialog from '@/components/Dialog.vue'; export default { components: { CustomDialog, }, data() { return { dialogTitle: '打印内容', toPrintContent: '这是要打印的文本...', // 这是你需要打印的具体字符串 dialogVisible: false, }; }, }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值