当前位置: 首页 > wzjs >正文

织梦网站首页打开慢鲤城网站建设推广服务公司

织梦网站首页打开慢,鲤城网站建设推广服务公司,开发公司修路的费用,做高档衣服的网站前言 在 Vue.js 开发中,组件化是核心思想之一。但组件间的通信是一个重要课题,特别是子组件向父组件传递数据的场景。Vue 提供了多种通信方式,而$emit正是实现子→父通信的关键方法。本文将深入解析$emit的原理、使用场景及最佳实践。 一、$e…

前言

在 Vue.js 开发中,组件化是核心思想之一。但组件间的通信是一个重要课题,特别是子组件向父组件传递数据的场景。Vue 提供了多种通信方式,而$emit正是实现子→父通信的关键方法。本文将深入解析$emit的原理、使用场景及最佳实践。

一、$emit 基础:原理与语法

1.1 核心概念

$emit是 Vue 实例的内置方法,用于触发自定义事件。其核心作用是:

  • 创建事件通道:子组件定义并触发事件
  • 传递数据载体:可携带任意类型参数
  • 父组件响应:通过v-on@监听并处理

 1.2 语法结构

// 子组件中触发事件
this.$emit('event-name', payload1, payload2);// 父组件中监听
<ChildComponent @event-name="handleEvent" />

1.3 工作流程图

子组件 (Child)            父组件 (Parent)┌───────────┐            ┌───────────┐│ this.$emit ├───────┐    │ @event    ││('event')   │       │    │ =handler  │└───────────┘       │    └───────────┘▼事件总线│▼┌───────────┐            ┌───────────┐│           │            │ handler() ││  等待触发  │◀──────────┤  处理逻辑  ││           │            │           │└───────────┘            └───────────┘

二、典型应用场景

2.1 表单数据提交

场景:子组件收集表单数据,提交给父组件处理

子组件示例

<template><form @submit.prevent="handleSubmit"><input v-model="username" placeholder="用户名"><button type="submit">提交</button></form>
</template><script>
export default {data() {return { username: '' }},methods: {handleSubmit() {// 触发事件并传递数据this.$emit('form-submit', {username: this.username,timestamp: new Date()});}}
}
</script>

父组件示例

<template><div><FormComponent @form-submit="processForm" /><p v-if="lastSubmit">上次提交: {{ lastSubmit.username }}</p></div>
</template><script>
import FormComponent from './FormComponent.vue';export default {components: { FormComponent },data() { return { lastSubmit: null } },methods: {processForm(data) {// 接收数据并处理this.lastSubmit = data;console.log('接收到表单数据:', data);}}
}
</script>

2.2 状态变更通知

场景:子组件状态变化时通知父组件

子组件示例

<template><div><el-switch v-model="status" @change="onStatusChange" /><span>{{ status ? '开启' : '关闭' }}</span></div>
</template><script>
export default {props: ['initialStatus'],data() {return { status: this.initialStatus }},methods: {onStatusChange(newValue) {// 通知父组件状态变更this.$emit('status-changed', newValue);}}
}
</script>

父组件示例

<template><div><StatusSwitch :initial-status="featureEnabled"@status-changed="updateFeature"/><p>功能状态: {{ featureEnabled ? '启用' : '禁用' }}</p></div>
</template><script>
import StatusSwitch from './StatusSwitch.vue';export default {components: { StatusSwitch },data() { return { featureEnabled: false } },methods: {updateFeature(newStatus) {// 更新状态并可能触发其他操作this.featureEnabled = newStatus;this.$message(`功能已${newStatus ? '启用' : '禁用'}`);}}
}
</script>

2.3 列表项交互

场景:列表组件中的项触发事件

子组件示例

<template><li @click="handleClick">{{ item.name }}<button @click.stop="deleteItem">删除</button></li>
</template><script>
export default {props: ['item'],methods: {handleClick() {this.$emit('item-clicked', this.item.id);},deleteItem() {this.$emit('delete-item', this.item.id);}}
}
</script>

父组件示范:

<template><ul><ListItem v-for="item in list" :key="item.id":item="item"@item-clicked="viewItem"@delete-item="removeItem"/></ul>
</template><script>
import ListItem from './ListItem.vue';export default {components: { ListItem },data() {return {list: [{ id: 1, name: '项目A' },{ id: 2, name: '项目B' }]}},methods: {viewItem(id) {this.$router.push(`/items/${id}`);},removeItem(id) {this.list = this.list.filter(item => item.id !== id);}}
}
</script>

三、进阶技巧与最佳实践

3.1 事件命名规范

  • 推荐风格:使用短横线分隔 (kebab-case)
  • 避免冲突:添加组件前缀 (如 user-form:submit)
  • 语义化:使用动词开头 (如 delete-item 而非 item-delete)

3.2 事件参数优化

// 推荐:传递结构化数据
this.$emit('user-updated', {id: this.userId,name: this.username,action: 'update'
});// 避免:传递零散参数
this.$emit('user-updated', this.userId, this.username, 'update');

3.3 与v-model结合

<template><input :value="value" @input="$emit('input', $event.target.value)">
</template><script>
export default {props: ['value']
}
</script>

3.4 事件验证

props: {// 基础类型检查value: String,// 带验证的事件处理函数onSubmit: {type: Function,required: true,validator: fn => typeof fn === 'function'}
}

四、总结与最佳实践

4.1 适用场景总结

  • 子组件向父组件传递数据
  • 组件状态变更通知
  • 表单数据提交
  • 列表项交互事件

4.2 对比其他通信方式

方式方向复杂度适用场景
$emit子→父简单组件通信
props父→子单向数据流
event bus任意跨级 / 兄弟组件通信
Vuex/Pinia全局大型应用状态管理
provide/inject祖先→后代跨级共享数据

 


文章转载自:

http://6wKyCt1S.nLbhj.cn
http://hP2ZTJyB.nLbhj.cn
http://vk5fQ9t1.nLbhj.cn
http://BNTKwq7W.nLbhj.cn
http://nNTYpdn5.nLbhj.cn
http://yKTLbuIK.nLbhj.cn
http://hMuDwRAv.nLbhj.cn
http://hIcdbju8.nLbhj.cn
http://bX52mYjR.nLbhj.cn
http://s5nKLCwg.nLbhj.cn
http://nHmiLvcj.nLbhj.cn
http://WhXeTXiu.nLbhj.cn
http://hOimg14O.nLbhj.cn
http://4jQItmj6.nLbhj.cn
http://rMrxeDrD.nLbhj.cn
http://4PpgpQJW.nLbhj.cn
http://Trnm3WQB.nLbhj.cn
http://deOChYq9.nLbhj.cn
http://rC0OZ2Zl.nLbhj.cn
http://hAEGI8Bt.nLbhj.cn
http://cNS5b4Pg.nLbhj.cn
http://BVnCVLLM.nLbhj.cn
http://h9wKURfc.nLbhj.cn
http://gCqf13qD.nLbhj.cn
http://ktwrcRVi.nLbhj.cn
http://1jQ2k9YU.nLbhj.cn
http://ikGIDQoS.nLbhj.cn
http://wtst4IoP.nLbhj.cn
http://LbkJa7qP.nLbhj.cn
http://XBjAZflD.nLbhj.cn
http://www.dtcms.com/wzjs/618660.html

相关文章:

  • 网站+建设+拖拉+源码+系统简单动画制作
  • 万域网站建设新手怎么开始做微商
  • 正规的咨询行业网站策划免费做图片链接网站
  • wordpress建站视频为知笔记 编辑wordpress
  • wordpress 首页展示百度网站怎么优化排名
  • 网站文章后台写完前台不显示开网站需要准备什么
  • 百度热搜榜第一苏州网站优化建设
  • 做网站导航栏素材图最专业微网站建设价格
  • 乐清建设公司网站响应式视频网站
  • 太仓苏州网站建设建设通app免费版
  • 郑州微信网站公司官网包括什么内容
  • 双栏wordpressseo是什么意思新手怎么做seo
  • 如何用dw做网站怎么做公司销售网站
  • 建设行政主管部门查询网站网站建设进展推进表
  • 大型租车门户网站商业版源码沈阳制作网站
  • 萧山区建设工程质量监督站网站百度成都分公司
  • 有没有做淘宝客网站的关键词app
  • 海南省住房建设厅网站承接婚庆公司网站建设
  • mg电子游戏网站开发一级A做爰片秋欲浓网站
  • 网站开发常见方法行业门户网站方案
  • 网站的留言板怎么做代理ip多少钱一个月
  • 外贸营销型网站制作wordpress积分抽奖
  • 建设信用卡在线海淘网站返现phython 做的网站
  • 网站品牌推广济南百度竞价开户
  • 小学电教检查网站建设资料品牌建设规划制定及实施情况
  • 南京网站关键词优化咨询wordpress上传图片自动重命名
  • 建设网站需要营业执照h5技术网站
  • 百度知道网址阿里巴巴网站优化怎么做
  • 网站框架设计图新闻热点大事件
  • 建立充电站需要多少钱企业网站完整版