provide/inject实现响应式

provide 和 inject 主要在开发高阶插件/组件库时使用。并不推荐用于普通应用程序代码中。

此项API可以向定义属性的 后代组件中注入依赖,适用于三级组件及以上的嵌套,可以使注入依赖的组件获取祖先组件的数据状态,默认不是响应式的,但是你可以与vm.observable组合使用实现响应式。


9hk87-0wgh5.gif

实现逻辑:
parent.vue

<template>
  <div class="provide-inject">
    <el-button @click="() => theme.msg += 1">provide/inject</el-button>
    <Son></Son>
  </div>
</template>

<script>
import Son from './Son'
import Vue from 'vue'

export default {
  components: {
    Son
  },
  provide() {
    this.theme = Vue.observable({
      msg: 0
    })
    return {
      theme: this.theme
    }
  }
}
</script>

children.vue:

<template>
  <div class="son">
    二级页面: <span>{{ theme.msg }}</span>
    <grandson></grandson>
  </div>
</template>

<script>
import grandson from './Grandson'
export default {
  name:'Son',
  inject: {
    theme: {
      default: () => ({})
    }
  },
  components:{
    grandson
  }
}
</script>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容