element ui dialog 父子组件传值

本文介绍在使用ElementUI的Dialog组件作为子组件时,如何正确地在关闭Dialog时进行值的传递。通过监听子组件的@close事件并触发父组件的方法,实现了父子组件之间的有效通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做课设的时候 用到了Elementui 中的dialog的组件,但在将dialog作为一个子组件的时候,传值出现了问题。当关闭dialog的时候应该怎么传值?

 

一开始的时候的想法比较简单,就是父组件直接传值来作为子组件的show/hidden的值。

然而这样的问题是当子组件close的时候,他会直接直接改变他的值,但是子组件不能直接改变props的值,因此可以通过子组件触发事件给父组件。

 

子组件在关闭时候的事件,通过阅读官方文档,我们发现他提供了一个关闭的时候的回调事件。

我们可以通过@close=“相应事件”来写需要给子组件传的事件。

 

父组件:

<el-button style="float: right; padding: 3px 8px" type="text" @click="report(item)">举报</el-button>
 <accuse :accuseitem="accuseitem" :accuseVisible="accuseVisible" @close-dialogStatus="Close_dialog"></accuse>
  data () {
    return {
      accuseitem: {},
      accuseVisible: false
    }

 

 methods: {
    Close_dialog (val) {
      this.accuseVisible = false
    },
    report (item) {
      this.accuseitem = item
      this.accuseVisible = true
    }
  }

子组件:

    <el-dialog
      custom-class="m-dialog"
      :visible.sync="vis"
      width="100%"
      top="0px"
      @close="closeDialog"
      :show-close="true"
      >
    </el-dialog>

 

  props: {
    accuseVisible: Boolean,
    accuseitem: Object
  },
  watch: {
    accuseVisible (newValue, oldValue) {
      this.vis = newValue
    }
  },
  data () {
    return {
      vis: false
    }
  }

 

  methods: {
    closeDialog () {
      this.$emit('close-dialogStatus', true)
    }
  }

实现结果:

 

<think>我们正在讨论一个使用`@Watch`装饰器的TypeScript方法,该方法位于一个el-dialog子组件中。问题聚焦于这个`@Watch`方法的作用。 根据之前的上下文,我们知道`@Watch`用于监听某个属性的变化,并在变化时执行相应的操作。在子组件中,这通常用于响应父组件递的prop的变化。 具体到问题中的代码片段: @Watch('seachKey') private seachKeyChange(value: any) { if (value.trim()) { this.getDishForName(this.seachKey) } } 在el-dialog子组件的上下文中,我们假设`seachKey`是一个prop,由父组件递给子组件(例如,当对话框打开时,父组件设置搜索关键词)。当父组件改变递进来的`seachKey`时,子组件需要监听这个变化并执行搜索。 作用: 1. 监听prop(seachKey)的变化:当父组件递的seachKey发生变化时,触发seachKeyChange方法。 2. 条件触发搜索:只有当新的seachKey去除首尾空格后不为空字符串时,才调用getDishForName方法进行搜索。 3. 避免空搜索:通过trim()过滤掉纯空格的情况,减少不必要的请求。 但是,在el-dialog子组件中,这个监听器可能有特定的使用场景: - 当对话框打开时,父组件可能会设置一个初始的搜索关键词(可能是空,也可能是预填充的)。 - 在对话框打开状态下,如果父组件更新了搜索关键词(例如,从外部改变),子组件需要响应这个变化。 同时,需要注意el-dialog组件的特性:它可能通过一个visible属性控制显示/隐藏。在对话框关闭时,我们可能不希望执行搜索,但上述代码并没有考虑对话框的显示状态。因此,实际应用中可能需要结合对话框的显示状态来判断是否执行搜索。 因此,总结作用:在el-dialog子组件中,该@Watch方法主要用于在父组件入的搜索关键词发生变化时,触发关键词搜索(非空情况下),以实现对话框内数据的动态更新。 现在,根据规则,我们需要在回答后提出3-5个相关问题,并以“§§相关问题§§”开头,然后列出问题。 注意:问题要围绕用户的问题(el-dialog子组件@watch方法作用)及我们的回答来提出。</think>在 Vue.js 的 Element UI 框架中,`el-dialog` 子组件使用 `@Watch` 方法的作用是**监听父组件递的 prop 变化**,并根据变化执行特定操作。以下是具体分析: ### 核心作用 1. **响应式数据监听** - 当父组件递给 `el-dialog` 的 prop(如 `visible` 控制弹窗开关)发生变化时,`@Watch` 自动触发回调函数 - 示例:监听弹窗开启/关闭状态,执行初始化或清理操作 ```typescript @Watch('visible') onVisibleChange(newVal: boolean) { if (newVal) this.loadData() // 弹窗打开时加载数据 else this.resetForm() // 弹窗关闭时重置表单 } ``` 2. **数据同步处理** - 当父组件通过 prop 向弹窗递数据时(如表单初始),监听数据变化并更新子组件内部状态 - 避免直接修改 prop ,符合 Vue 单向数据流原则 3. **条件触发逻辑** - 添加业务条件判断(如示例中的 `value.trim()`),防止无效操作 - 典型场景:搜索框监听关键词变化,非空时触发搜索请求 ### 典型应用场景 | 监听目标 | 作用 | 示例场景 | |-------------------|----------------------------------|----------------------------| | `visible` | 控制弹窗生命周期逻辑 | 打开时加载数据/关闭时重置 | | 表单初始(如 `formData`) | 同步父组件数据到弹窗表单 | 编辑时填充表单 | | 异步操作结果 | 根据结果更新弹窗状态 | 提交成功后自动关闭弹窗 | ### 注意事项 1. **避免直接修改 Prop** 应使用 `this.$emit` 通知父组件修改数据源,而非在子组件中直接修改 prop 2. **性能优化** 对高频变化的(如输入框)使用防抖(debounce),减少不必要的渲染或请求 3. **拼写检查** 确保监听的变量名与 prop 声明完全一致(如 `searchKey` 而非 `seachKey`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值