11个vue的组件通信方式

174 阅读1分钟

只适合面试概括,其中原理自行探索

1. props和$emit
2. $parent和$children
3. ref(组件上获取组件实例,dom上获取真实dom对象)
4. provide和inject 依赖注入(非响应式)
5. $attrs/$listeners (vue2.4+配合inheritAttrs为false使用)
6. EnvntBus(原理:一个新的vue实例,通过$on+$emit)
7. vuex(适合大型项目,5大属性+辅助函数)
8. 自行实现发布订阅
   原理:对象存储+数组函数,每次订阅对应的属性新加函数,发布触发事件则执行该属性的数组里面的每个函函数
   模拟:(只是模拟,方便理解发布订阅的。请考虑是否存在该订阅模式,如何移除订阅,一次订阅如何实现等问题)
   // 订阅对象
   let subscribe = {
    '吃':【
          ()=>{console.log('早上吃')},
          ()=>{console.log('中午吃')},
          ()=>{console.log('晚上吃')}
          】
   }
   // 新增订阅
   subscribe['吃'].push(()=>{console.log('还要吃宵夜')})
   // 发布
    subscribe['吃'].forEach(fn=> fn());
   // 输出:早上吃  中午吃 晚上吃 还要吃宵夜
  
9. window属性
10. 路由带参(可以实现通信但不建议)
11. cookie,sessionStorage,localStorage