组件通信——props,emit
父子组件通信
父亲用子组件属性/方法
html:
<Son ref="sonHandler" />
重点是通过ref获取
script:
this.$refs.sonHandler.name //此处name用属性名或方法名都可以调用子组件Son的data/methods/computed里的方法/属性
子组件用父父亲的属性/方法
如果只用data里的属性,那有两种方法
第一种:通过props
,这种方法不可以改父组件的值
第二种:用this.$parent.name
,这样可以改父组件的属性值,而且父组件的也会跟着改
如果要用methods/compute
只能通过this.$parent.functioName()
的方式
非父子组件通信
因为vue3从实例中移除了$on, $off, $once,所以现在要通过第三方插件mitt
来实现非父子组件通信
https://www.npmjs.com/package/mitt
粗略:
定义一个公共mitt实例
const emitter = mitt()
export default emitter
然后需要的组件就引用它
触发:
emitter.emit("eventName", data) //触发的自定义事件,一个名字对应一个事件,一个事件执行一个函数(即名字要独一无二),此处可以不传data,和$emit相似
监听:
emitter.on("eventName", (data) => {
alert("我被触发了")
})
在组合式API里用emit
//先声明
let emit = defineEmits(["custom-event"])
//在指定事件里触发
const callFather = () => {
emit("custom-event", someData)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话