provide/inject

2019-08-09  本文已影响0人  陈大事_code

作用

成对出现,在组件中可以获取祖先组件的方法/属性,不管该组件嵌套有多深。

一般来说,我们可以通过$parent来使用父组件的方法/属性,但是对于祖先组件来说,可以比较困难。

使用场景

在嵌套很深的子孙组件中,调用顶层祖先组件的刷新页面方法。

// 顶层组件 Main.vue
export default {
    ...
    provide() {
        return {
            reload: this.reload();
        }
    },
    methods: {
        reload() {
            ... // 刷新页面方法逻辑
        }
    }
}
// 嵌套很深的一个子孙组件 
export default {
    ...
    inject: ['reload'],
    methods() {
        this.reload()   // 使用顶层组件中的刷新方法
    }
}

深入

如下示例:

// 组件1 - 提供provide: 
provide() {
    return {
      returnCate: this.obj,
    }
  },
      
   data() {
    return {
      obj: {
        category: '',
      },
    }
  },
      
   methods: {
    categoryChange(val) {
      // 一定要更这种方式改某个属性
      this.obj.categoryId = val
    },
  },
 
// 组件2 - 应用inject
inject: ['returnCate'],
watch: {
    'returnCate.categoryId'(val) {
        // 监听到响应式
        console.log('change', val)
    },
  },
上一篇 下一篇

猜你喜欢

热点阅读