-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
面试官:Vue组件间通信方式都有哪些? #12
Comments
一、组件间通信的概念开始之前,我们把组件间通信这个词进行拆分
都知道组件是 二、组件间通信解决了什么在古代,人们通过驿站、飞鸽传书、烽火报警、符号、语言、眼神、触碰等方式进行信息传递,到了今天,随着科技水平的飞速发展,通信基本完全利用有线或无线电完成,相继出现了有线电话、固定电话、无线电话、手机、互联网甚至视频电话等各种通信方式从上面这段话,我们可以看到通信的本质是信息同步,共享回到 二、组件间通信的分类组件间通信的分类可以分成以下
关系图: 三、组件间通信的方案整理
props传递数据
props:{
// 字符串形式
name:String // 接收的类型参数
// 对象形式
age:{
type:Number, // 接收的类型为数值
defaule:18, // 默认值为18
require:true // age属性必须传递
}
}
<Children name="jack" age=18 /> $emit 触发自定义事件
this.$emit('add', good)
<Children @add="cartAdd($event)" /> ref
父组件 <Children ref="foo" />
this.$refs.foo // 获取子组件实例,通过子组件实例我们就能拿到对应的数据 EventBus
// 创建一个中央时间总线类
class Bus {
constructor() {
this.callbacks = {}; // 存放事件的名字
}
$on(name, fn) {
this.callbacks[name] = this.callbacks[name] || [];
this.callbacks[name].push(fn);
}
$emit(name, args) {
if (this.callbacks[name]) {
this.callbacks[name].forEach((cb) => cb(args));
}
}
}
// main.js
Vue.prototype.$bus = new Bus() // 将$bus挂载到vue实例的原型上
// 另一种方式
Vue.prototype.$bus = new Vue() // Vue已经实现了Bus的功能
this.$bus.$emit('foo')
this.$bus.$on('foo', this.handle)
|
作者 |
感谢指正 |
直接用export和import也行,而且还不用管爸爸儿子,爷爷,大爷,侄子,孙子.是这种方法有问题吗?为啥你们都不提的? |
|
哦~~,原来是这样 |
这一页是不是乱码了? |
Pinia |
不错!不错!爱了爱了 |
No description provided.
The text was updated successfully, but these errors were encountered: