网站首页 > 精选文章 正文
组件通信
我们在开发vue项目的时候,经常会遇到多个组件互相通信的问题,也就是数据传递,兄弟组件传递、父子组件传递等,本文就是为了解决组件之间通信问题。
store共享通信
利用vuex或者pina定义store文件,在共享区域内进行互相调用,很方便,这种通信方式采用共享内存的原理,定义了store之后,可以互相使用对方的store进行数据调用和传递,此处不再赘述
object对象通信
对象具有天然的可传递性,使用对象可以避免vue的props属性不能修改的问题,对象内部的成员变量可以被任意修改,所以可以进行信息的交互。
- 父组件
父组件通过参数传递 data-info属性,里面包含
{
"visiable":false,
"categoryId":1
}
父组件调用
<category-attr ref="categoryAttr" :data-info="specAttr"/>
- 子组件
子组件props接收data-info信息
props:{
//交互信息
dataInfo:{
type : Object,
default : {}
},
},
子组件可以任意修改对象的信息
父组件调用子组件
可以使用refs方法
父组件:定义ref="categoryAttr"
<category-attr ref="categoryAttr" v-model:visiable="specAttr.visiable" :category-id="specAttr.categoryId"/>
调用方法:this.$refs.categoryAttr.init()
async openCategoryAttr(id){
this.specAttr.categoryId = id;
this.specAttr.visiable = true;
//防止子组件加载太慢导致获取不到组件
setTimeout(()=>{
console.log(this.$refs.categoryAttr);
this.$refs.categoryAttr.init();
},10)
}
子组件:定义init()方法
methods : {
sendNotifyMessage(val){
this.$emit('update:visiable',val);
},
/**
* 初始化数据
*/
async init(){
//todo
}
}
子组件调用父组件
由于自定义组件本身不具备click事件,所以这里@click不会生效,需要子类进行触发,子组件的view有@click事件,所以子组件被调用的时候,去调用父组件的方法
vm.$emit( event, arg ) //触发当前实例上的事件
vm.$on( event, fn );//监听event事件后运行 fn;
父组件定义方法
<lemon-search
@click="clickSearch()">
</lemon-search>
methods : {
clickSearch(){
console.log("....")
}
}
子组件调用父方法
//子组件调用父组件方法
this.$emit('click');
猜你喜欢
- 2025-04-29 vue 3 学习笔记 (八)——provide 和 inject 用法及原理
- 2025-04-29 面经:给你300一天,你来不来?已offer(前端岗)
- 2025-04-29 Vue3,父组件子组件传值,provide(提供)和inject(注入)传值
- 2025-04-29 Vue组件通信全方案!8种方法解决父子/兄弟/跨级组件数据传递难题
- 2025-04-29 vue:组件中之间的传值
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)