子组件自定义事件$emit实现新页面弹窗关闭之后父界面刷新

别再烧管子了!手把手教你用Tc/Tj/Pc公式搞定三极管散热设计(以2N5551为例) 本文详细解析了三极管散热设计的关键参数Tc、Tj和Pc,并以2N5551为例,手把手教你从数据手册提取热阻参数、计算实际工作温度,最终确定散热方案。通过热阻网络分析和实战计算流程,帮助硬件工程师避免常见设计误区,提升散热效率。 阅读详情

需求

弹窗关闭之后父界面刷新展示最新数据

业务字段较多,甲方要求增加新页面展示数据,且默认展开所有数据行。因框架已有不适用,默认文本数据较长tooltip展示,且有些字段slot格式复杂不支持框架view页面展示。故开发新页面,可查看可编辑。

效果图如下 F页面C子页面
父子页面展示

实现方案

子页面作为Dialog整体引入父页面。子组件大文本添加slot 设置type属性为文本且不设置最大展开行

AVUE 大文本默认展开slot

      <template  slot="improvementMeasures">
        <el-input
          v-model="form.improvementMeasures"
          :disabled="false"
          type="textarea"
          :autosize="{ minRows: 4 }"
        ></el-input>
      </template>

VUE 自定义事件实现 父界面刷新

vue组件事件

在组件的模板表达式中,可以直接使用 $emit 方法触发自定义事件
父组件可以通过 v-on (缩写为 @) 来监听事件:

那么如何用呢?

去源码看看
vue.d.ts开发包源码部分 如下 可以看到VUE 通过关键字this可以引用很多内置方法

export interface Vue {
  readonly $el: Element;
  readonly $options: ComponentOptions<Vue>;
  readonly $parent: Vue;
  readonly $root: Vue;
  readonly $children: Vue[];
  readonly $refs: { [key: string]: Vue | Element | (Vue | Element)[] | undefined };
  readonly $slots: { [key: string]: VNode[] | undefined };
  readonly $scopedSlots: { [key: string]: NormalizedScopedSlot | undefined };
  readonly $isServer: boolean;
  readonly $data: Record<string, any>;
  readonly $props: Record<string, any>;
  readonly $ssrContext: any;
  readonly $vnode: VNode;
  readonly $attrs: Record<string, string>;
  readonly $listeners: Record<string, Function | Function[]>;

  $mount(elementOrSelector?: Element | string, hydrating?: boolean): this;
  $forceUpdate(): void;
  $destroy(): void;
  $set: typeof Vue.set;
  $delete: typeof Vue.delete;
  $watch(
    expOrFn: string,
    callback: (this: this, n: any, o: any) => void,
    options?: WatchOptions
  ): (() => void);
  $watch<T>(
    expOrFn: (this: this) => T,
    callback: (this: this, n: T, o: T) => void,
    options?: WatchOptions
  ): (() => void);
  $on(event: string | string[], callback: Function): this;
  $once(event: string | string[], callback: Function): this;
  $off(event?: string | string[], callback?: Function): this;
  $emit(event: string, ...args: any[]): this;
  $nextTick(callback: (this: this) => void): void;
  $nextTick(): Promise<void>;
  $createElement: CreateElement;
}

思路

1. 定义新页面 子组件
2. 自定义事件$emit
3. 父页面 父组件 引入
4. 组件注册
5. 使用子组件 监听事件
6. 执行监听函数

核心代码

1. 事件定义

//事件名称 ,事件参数
$emit(event: string, ...args: any[]): this;

弹窗确认关闭函数内this关键字自定义事件success

confirmSave(){
	//other things;
	this.$emit('success');
	//done();
}
2. 帕斯卡命名组件且在父组件中引入以及注册

组件名格式说明

Vue 支持将模板中使用 kebab-case 的标签解析为使用 PascalCase 注册的组件。这意味着一个以 MyComponent 为名注册的组件,在模板中可以通过 或 引用。这让我们能够使用同样的 JavaScript 组件注册代码来配合不同来源的模板。

components 显式注册

//组件名每个首字符大写;myTest为该vue文件名
import MyTest from myTest;
export default {
  components: {
  MyTest
  }
3. 子组件被引用与父事件监听
  • **帕斯卡命名有组件使用方式 “-” 连接各部分字段
  • ref引用该组件,在父界面按钮点击之后可以引用该子组件表单Form被打开
  • @自定义事件名实现监听,同时绑定父组件相应子组件事件的事件**
<my-test ref="mytestRef" @success="refreshData"> </my-test >
4.父组件回调函数
refreshData(){
//刷新函数
}

5.按钮弹窗事件

vue的内置属性ref介绍

  • 父界面查看你按钮监听事件
  • 点击时传递数据行
  • 按钮监听事件中
    • 子组件函数 init定义组件打开时数据初始化事件
    • refs内置属性,this关键字引用当该子组件被定义后添加ref属性如ref=“crud”
    • readonly $refs: { [key: string]: Vue | Element | (Vue | Element)[] | undefined };

  • 子组件
    • init事件执行,弹窗可看,form可被编辑
    • 编辑完成确定返回到父组件
    • 执行success自定义事件

  • 父组件
    • 监听到子组件事件
    • 执行响应子组件事件的父组件事件方法refreshData
<el-button type="text" icon="el-icon-view" size="mini"
 @click="detailView(row)"
 >查看
 </el-button>

 detailView(row){
      this.$refs.mytesttRef.init(row,this.option.column)
    },

vue 弹窗关闭刷新父页面表格的数据 阅读详情

相关推荐

el-dialog使用,2种方法解决监听不到传值变化问题

el-dialog使用,2种方法解决监听不到传值变化问题

jieweiwujie的博客 2221

弹出层关闭父页面刷新

弹出一个窗口关闭刷新父页面,自己试过可以,不知道是不是你们要的效果

Vue事件系统深度解析:从v-on到$emit的响应式交互设计

Vue事件系统并非DOM事件的简单封装,而是连接用户操作与响应式数据的核心枢纽。其本质是将点击、输入等原生行为转化为状态变更信号,依托v-on指令绑定、事件修饰符控制流、custom events定义组件契约,并通过$emit实现子通信。技术价值在于保障事件流可预测、可调试、可校验——尤其在大型项目中,显式声明events或defineEmits能避免拼写错误导致的静默失败,提升协作效率与线上稳定性。典型应用场景涵盖搜索防抖、评分组件、弹窗关闭确认等高频交互需求,本文结合Vue 2/3差异与真实项目案例,

weixin_30908103的博客 463

Vue+Layer子弹窗保存关闭刷新父页面的方法

一、刷新整个浏览器页面: window.parent.location.reload(); varindex=parent.$layer.getFrameIndex(window.name); parent.$layer.close(index); 二、刷新当前Vue单页面: 1、在父页面使用window定义一个全局的方法 mounted(){ window['layerTest']=()=>{ ...

JennyLiang2019的博客 1468

VUE调用子页面弹窗或组件弹窗关闭弹窗刷新级页面主页面,通过this.$emit实现

Vue 用this.$refs调用子页面窗口,关闭窗口用this.emit刷新父页面 this.$emit级向自己传值 第一步在级页面创建自己页面的引用 <template> <div> <edit ref="edit" @refresh="search"></edit> //@refresh 这个命名可以自己改,edit是你子页面名字 ,search是我的方法名,ref就是我调用子页面弹窗的名字 </div> </t

小菜鸟的博客 1万+

子组件自定义事件$emit实现新页面弹窗关闭之后界面刷新_element ui的dialog中使用$emit

/组件名每个首字符大写;myTest为该vue文件名。//事件名称 ,事件参数。

2201_75604580的博客 1538

KSO-vue弹窗界面操作界面的方法,或关闭界面刷新界面列表

vue弹窗界面操作界面的方法,或关闭界面刷新界面列表 界面代码 <el-dialog :visible.sync="open" width="1300px"> <el-divider>{{ isEdit==1?'修改界面':'新增界面' }}</el-divider> <Edits ref="editForms" :editid="editFormId" @refresh="

kso的博客 1432

Vue中打开和关闭弹窗子组件传值

每次写组件到子组件双向数据绑定都会忘,赶紧记下来…… 单项数据流Vue.js介绍 级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更级组件的状态,从而导致你的应用的数据流向难以理解。 额外的,每次级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。 可以使用浅拷贝,不用影响组件状态,json.stringfy json.parse 注意在

weixin_45803990的博客 5506

vue3 点击后弹窗

2、子组件可以使用$emit触发组件的自定义事件。1、组件可以使用props把数据传给子组件。点击“+”按钮后弹出选项列表Member子组件,点击Member子组件上的按钮时关闭弹窗

http____的博客 2021

$refs $emit

refs $emit是一个非常常见的需求。

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 586

Vue$emit调用组件异步方法模拟.then实现

需求:有一个封装好的弹窗子组件,点确认时$emit组件删除方法,组件删除接口调用成功后需要调用子组件close()方法。方法:1可以直接$refs.dialog.close()关闭弹窗。方法2:可以模拟.then在子组件实现这一逻辑。

misschengispink的博客 1966

Vue 组件通信揭秘:子组件是如何“悄悄话”告诉组件的?

Vue组件通信:子组件如何向组件传递数据? 在Vue应用中,子组件通过$emit方法向组件传递数据,实现组件间通信。 子组件发射事件子组件使用this.$emit('事件名', 数据)触发自定义事件,并携带数据(如价格信息)。 组件监听事件组件在模板中通过@事件名="处理方法"监听子组件事件组件接收数据:组件的处理方法会接收到子组件传递的数据,并更新自身状态,触发视图响应式更新。 核心机制: Props(传子) ⬇️:单向数据流 $emit(子传) ⬆️:事件

小丁的博客 1039

Vue自定义事件子通信的工程化契约与最佳实践

Vue自定义事件实现单向数据流的核心机制,其本质并非语法糖,而是组件间显式、可预测、作用域受限的通信契约。它基于‘props down, events up’原理,保障组件解耦与可复用性,避免全局污染和隐式依赖。在中大型项目中,合理使用$emit能显著提升状态流向可控性、调试效率与TypeScript类型安全,广泛应用于表单联动、文件上传、搜索交互等高频场景。本文深入剖析其设计哲学、Vue 2/3差异、实操避坑及DevTools排查技巧,助力开发者从vue面试题理解跃迁至vue项目实战落地。

weixin_34367257的博客 409

vue子组件页面给组件页面传方法

我的项目有个bug是组件页面调用子组件页面弹窗(页面不同),等子组件页面关闭组件页面没有刷新 组件 子组件页面关闭时,传一个事件组件 组件页面标签内接收子组件传的方法,从而调用接口以刷新页面 ...

anny_mei的博客 707

子组件调用组件的方法修改组件中的数据

因为子组件不能修改组件传递过来的数据,所以若想让子组件修改组件的数据,只能让子组件发送一个请求,这个请求是让组件自己调用自己的方法来修改数据;通过这种方式,达到子组件修改组件数据的要求。 我通过 v-if=“showMoveSlotDialog” 来控制子组件的显示,是一个弹窗,当 showMoveSlotDialog 为 true 时,该弹窗显示; 但是现在有一个问题,就是怎样关闭弹窗,因为打开弹窗后我就只能操作弹窗组件,无法操作组件,而控制弹窗显隐的变量是组件中的 showMoveSlo

weixin_43882265的博客 1000

Vue2.0子组件事件派发机制

vue1.x过来的都知道,在vue2.0中,子组件事件通信的$dispatch和$broadcase被移除了。官方考虑是基于组件树结构的事件流方式实在是让人难以理解,并且在组件结构扩展的过程中会变得越来越脆落。特别是在组件层级比较深的情况下。通过广播和事件分发的机制,就显得比较混乱了。 官方在废除的同时,也为我们提供了替换方案,包括实例化一个空的vue实例,使用$emit反应子组件上的状态变...

weixin_30950607的博客 261
上一篇: 通过cell-class-name和row-class-name实现数据状态行变色
下一篇: 个性化与默认EXCEL文件导出实现
port:6379
博客等级 码龄7年 133粉丝 · 47原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值