Vue3组件(18)组件间传值/共享的方法的汇总

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue3组件(18)组件间传值/共享的方法的汇总相关的知识,希望对你有一定的参考价值。

参考技术A 目前只能想到这些了,对了,还有事件总线这类的就不考虑了。

最基础的方式,适用于 父组件和子组件之间的直接传值,多用于基础控件,比如input、el-input、el-select这类。
比较基础不多介绍了。

老牌的状态管理方式,各种组件之间各种传值,好吧专业术语叫做状态管理。

使用方法呢,其实就是一层窗户纸,捅破了大家就都知道了,这里不介绍了,可以看我的文集:
https://www.jianshu.com/nb/49384194

这个不是前端存储吗?也可以共享数据?

当然可以了,只是没有响应性而已。
使用方式可以参考这里: https://www.jianshu.com/p/607c01749168
当然也可以用其他第三方的封装类来管理。

Vuex挺强大的,只是有个小问题,不支持状态的保存,比如一刷新状态就没了,更不用提关掉网页等操作了。

那么如果我想长期保存状态呢?这时候就需要用到前端存储,比如localStrage或者indexedDB。

Vuex + 前端存储,二者配合起来就更强大了。

indexedDB的特点是可以长期保存数据,而且容量很大,那么是不是可以把字典数据存进来呢?然后让state来加载这些数据,这样的话就不用每次(打开页面)都到后端去获取数据。
既快捷又减轻后端的压力。

这个还是很简单粗暴的,目前正在研究,应该可以实现代替 Vuex 的数据状态管理方案。

因为Vuex不太适合Vue3的环境,应该可以有替代方案了。
在这里探讨了一下: https://www.jianshu.com/p/25b8e8a7e319
当然还很粗糙,距离完善还有很长的路要走。

这个家伙怎么也来了?跑错片场了吧。

其实不然,可能大家早就在默默的使用这种方式了。

比如博客网站,打开一篇博文,看着兴起写了一个讨论发了出去。

这时候讨论组件会把讨论数据提交给后端,后端处理后返回给前端,讨论组件得到确认回复后,是不是要告诉讨论列表组件:你有新的消息,请注意更新一下。

这是讨论组件就会向后端API申请新的讨论列表数据。

这样看来,讨论数据是不是经由后端API传递给另一个组件的呢?

好吧,有点杠的味道,但是原理就是这样的,我是想告诉大家,不要限制思维,发散一下总不会有错。

可能有人会说,你这是古老的思路,完全不懂现在的前端开发的思想,还。。。。

好吧,还是上面的例子,稍微改一下流程。

讨论组件向后端API提交数据的同时,把讨论数据共享给列表组件,列表组件不管三七二十,先显示了再说。

这样用户可以在第一时间在讨论列表里面看到自己发的讨论信息。

但是这还没有完,后端有没有成功保存讨论呢?

讨论组件得到后端的回复之后,还要做一下处理:
1、如果成功了,告知讨论组件新的讨论数据的ID
2、如果失败了,告知讨论组件,刚才的那条讨论数据没成功,你得通知用户。

讨论组件也要做相应的处理。
1、如果得到成功的通知,设置新的ID,为删除操作提供ID,否则删除操作咋办。
2、如果得到失败的通知,要告知用户失败了,并且问问用户,是否重发。

然后还有个小问题,如果讨论非常激烈,又有几个新的讨论出现了,那么什么时候更新这些讨论?是让用户手动更新,还是自动更新,还是讨论组件提交数据后,后端自动判断是否有新的讨论,如果有,一起返回给前端?

好像跑题了。

总之要设计好一个应用,各种细节问题,用户交互问题,都是需要考虑的。果然跑题了。。。

vue组件间传值

父组件向子组件传递数据

// 父组件传递
<dialogAttendee :dialogcascaderVisible="dialogcascaderVisible"></dialogAttendee>

// 子组件接接收
props:{  
    dialogcascaderVisible: {
        type: Boolean,
        default: false
    },
    reservation: Array,
}

父组件改变子组件中的数据

// 父组件中引用子组件
<son ref="son"></son>

// 父组件的点击事件
clickFunc(){
    // 更新子组件里a的值
    this.$refs.son.a = ‘xx‘;
    // 调用子组件里b方法
    this.$refs.son.b();
}

子组件调用父组件方法并向父组件传值

// 子组件触发事件
this.$emit(‘emitEvent‘, ‘123‘);

// 父组件
// 引用子组件并绑定方法
<part-template @emitEvent = "ievent"></i-template>
// 设置方法
methods:{
    ievent(data){
        console.log(‘allData:‘, data); 
    }
}

兄弟组件间传值

1 vuex

2 eventBus

// eventBus.js文件
import Vue from ‘vue‘;  
export default new Vue(); 

// 使用的组件首先引用这个文件
import Bus from ‘../../assets/js/eventBus‘

// 引用之后绑定函数,或触发已绑定的函数
// 绑定事件
Bus.$on(‘setData‘, param => {
    this.initShare(shareInfo,this);
}); 
// 触发时间
Bus.$emit(‘setData‘, 1); 

 

以上是关于Vue3组件(18)组件间传值/共享的方法的汇总的主要内容,如果未能解决你的问题,请参考以下文章

非父子组件间传值

Vue3 组件传值 props 和 attrs 区别

组件间传值props——ref——状态提升——context实现跨级通信

自定义组件,父子间传值

Vue组件间传值 v-model

vue的父子组件间传值以及非父子间传值