vue组件通信实例:el-dialog作为子组件

原因:一个.vue文件有点大,里面有很多el-dialog,接口,参数。所以我分离了一下,把el-dialog作为子组件。

从父组件传prop到子组件,完成组件通信。

子组件pushDialog.vue文件:其中open由父组件传过来开启子组件,close方法由子组件触发父组件关闭。

<template>
  <div>
    <el-dialog
      width="60%"
      title="移入栏目列表"
      :visible.sync="open"
      append-to-body
      :before-close="close"
    >
      <span slot="footer" class="dialog-footer">
        <el-button @click="close" type="primary">保存</el-button>
        <el-button @click="close">取消</el-button>
      </span>
    </el-dialog>
  </div>
</template>

子组件的js

export default {
  name: "pushDialog",
  props: {//接受父组件传过来参数值的子组件参数
    open: Boolean,
    currentClassifyNames: "",
  },
  data() {
    return {},
  },
  methods: {
  	//在子组件中需要向父组件传值处使用this.$emit("function",param); 其中function为父组件定义函数,param为需要传递参数
    close() {
      let show = false;
      this.$emit("pushDialogHide", show);
    },
  },
}

父组件调用:
pushDialogHide为父组件定义方法用于子组件调用,方法触发父组件定义的函数hideDialog。
:open 和 :currentClassify对应子组件的参数名称,用于接受父组件传参。
pushDialogOpen 和 currentClassify为父组件定义的参数值,需要传到子组件。

<el-button type="success" size="mini" @click="goPushColumn">移入栏目</el-button>
<!-- 移入栏目弹窗框 -->
    <push-dialog
      @pushDialogHide="hideDialog"
      :open="pushDialogOpen"
      :currentClassifyNames="currentClassify"
    >
    </push-dialog>

父组件script

import PushDialog from "./pushDialog.vue";
export default {
  name: "initialColumn",
  components: { PushDialog },
  data() {
    return {
      // 控制弹窗显示隐藏的值
      pushDialogOpen: false,
      // 需要传到父组件的值
      currentClassify: undefined,
     } 
  methods: {
    //..给currentClassify赋值操作(省略掉..)...//
    // ...  //
    
    /** 给子组件传参 */
    goPushColumn() {
      this.pushDialogOpen = true;
      this.currentClassifyNames = this.currentClassify;
    },
    // 父组件方法@pushDialogHide关闭弹窗调用的函数hideDialog
    hideDialog() {
      this.pushDialogOpen = false;
    },
  },
};

实现了避免vue文件代码冗杂,完成了父子组件通信。

参考了两篇文章:
https://blog.csdn.net/sisi_chen/article/details/81635216
https://blog.csdn.net/weixin_43988238/article/details/107658002

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过在组件中使用 `$emit` 方法向父组件传递值,并在父组件中监听该事件,在事件处理函数中修改父组件中控制 `el-dialog` 显示的变量。 在组件中: ```vue <template> <div> <button @click="showDialog">打开弹窗</button> <el-dialog v-model="dialogVisible"> <div>弹窗内容</div> <button @click="closeDialog">关闭弹窗</button> </el-dialog> </div> </template> <script> export default { data() { return { dialogVisible: false } }, methods: { showDialog() { // 显示弹窗 this.dialogVisible = true // 向父组件传递值 this.$emit('show-dialog', true) }, closeDialog() { // 关闭弹窗 this.dialogVisible = false // 向父组件传递值 this.$emit('show-dialog', false) } } } </script> ``` 在父组件中: ```vue <template> <div> <!-- 监听组件传递过来的事件 --> <child-component @show-dialog="handleShowDialog"></child-component> <el-dialog v-model="dialogVisible"> <div>弹窗内容</div> <button @click="closeDialog">关闭弹窗</button> </el-dialog> </div> </template> <script> import ChildComponent from './ChildComponent.vue' export default { components: { ChildComponent }, data() { return { dialogVisible: false } }, methods: { handleShowDialog(visible) { // 修改控制 el-dialog 显示的变量 this.dialogVisible = visible }, closeDialog() { // 关闭弹窗 this.dialogVisible = false // 向组件传递值 this.$refs.child.closeDialog() } } } </script> ``` 在父组件中,使用 `@show-dialog` 监听组件传递过来的事件,通过修改 `dialogVisible` 变量控制 `el-dialog` 是否显示。同时,在关闭 `el-dialog` 的按钮事件中,通过 `$refs` 获取组件实例,调用组件中的 `closeDialog` 方法,使组件中的 `dialogVisible` 变量也被修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值