vue子组件设计provide和inject理解使用

 更新时间:2023年08月11日 11:55:25   作者:大海爱奔跑  
这篇文章主要为大家介绍了vue子组件设计provide和inject理解及使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

阅读element-ui源码,发现在设计子组时件用到了inject属性,随即查了一下官方文档,得知vue在2.2.0版本里新增了provide / inject

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

按照文档的描述,我的理解是:在多级嵌套的组件体系中,某级外层组件可以通过provide属性向其下任意一级子组件提供一个依赖,不管层级有多深;而某级子组件则可以通过inject属性接收来自其上任意一级父组件提供的依赖(通过this.xxx形式获取)。注意:provideinject需要一起使用。

举个例子说明

清朝三位皇帝:康熙(玄烨)、雍正(胤禛)、乾隆(弘历)是祖孙三代,我们用vue组件的思想表示他们之间的关系,并模拟他们的一段对话,以此理解vue中的provideinject

调用组件

——大清帝国:qing-dynasty.vue

<!--组件的嵌套关系-->
<kangxi>
  <yongzheng>
    <qianlong></qianlong>
  </yongzheng>
</kangxi>

定义爷爷组件

——康熙皇帝:kangxi.vue

<template>
  <div class="kangxi">
    康熙皇帝
    <slot></slot>
  </div>
</template>
<script>
  export default {
    name: 'kangxi',
    // 爷爷对儿子提供‘kangxiToYongzheng'
    // 对孙子提供‘kangxiToQianlong'
    provide: {
      kangxiToYongzheng: '康熙皇帝对雍正皇帝说:"你是我儿子"',
      kangxiToQianlong: '康熙皇帝对乾隆皇帝说:"你是我孙子"'
    },
    data () {
      return {}
    }
  }
</script>
<style lang="scss">
.kangxi {
  width: 200px;
  height: 140px;
  text-align: center;
  background-color: #ffb599;
}
</style>

定义儿子组件

——雍正皇帝:yongzheng.vue

<template>
  <div class="yongzheng">
    雍正皇帝
    <slot></slot>
  </div>
</template>
<script>
  export default {
    name: 'yongzheng',
    // 儿子接收父亲提供的‘kangxiToYongzheng'
    inject: ['kangxiToYongzheng'],
    // 同时,儿子也给孙子提供‘yongzhengToQianlong'
    provide: {
      yongzhengToQianlong: '雍正皇帝对乾隆皇帝说:"你是我儿子"'
    },
    data () {
      return {}
    },
    created () {
      // 可以通过this获取
      console.log(this.kangxiToYongzheng, ' 雍正皇帝回答:"是的,爸爸"')
    }
  }
</script>
<style lang="scss">
  .yongzheng {
    width: 160px;
    height: 100px;
    margin: 0 auto;
    text-align: center;
    background-color: #84b5ff;
  }
</style>

// 打印结果

康熙皇帝对雍正皇帝说:"你是我儿子"  雍正皇帝回答:"是的,爸爸" 

定义孙子组件

——乾隆:qianlong.vue

<template>
  <div class="qianlong">
    乾隆皇帝
  </div>
</template>
<script>
  export default {
    name: 'qianlong',
    // 孙子接收爷爷的‘kangxiToQianlong'、父亲的‘yongzhengToQianlong'
    inject: ['kangxiToQianlong', 'yongzhengToQianlong'],
    data () {
      return {}
    },
    created () {
      // 可以通过this获取
      console.log(this.kangxiToQianlong, ' 乾隆皇帝回答:"是的,爷爷"')
      console.log(this.yongzhengToQianlong, ' 乾隆皇帝回答:"是的,爸爸"')
    }
  }
</script>
<style lang="scss">
.qianlong {
  width: 120px;
  height: 60px;
  margin: 0 auto;
  text-align: center;
  background-color: blanchedalmond;
}
</style>

 // 打印结果

康熙皇帝对乾隆皇帝说:"你是我孙子"  乾隆皇帝回答:"是的,爷爷"
雍正皇帝对乾隆皇帝说:"你是我儿子"  乾隆皇帝回答:"是的,爸爸"

以上就是vue子组件设计provide和inject理解使用的详细内容,更多关于vue子组件设计provide inject的资料请关注脚本之家其它相关文章!

相关文章

  • Vuex unknown action type报错问题及解决

    Vuex unknown action type报错问题及解决

    这篇文章主要介绍了Vuex unknown action type报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 深入理解vue3中的reactive()

    深入理解vue3中的reactive()

    本文主要介绍了深入理解vue3中的reactive(),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Vue中v-for的数据分组实例

    Vue中v-for的数据分组实例

    下面小编就为大家分享一篇Vue中v-for的数据分组实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • vue+elementUI(el-upload)图片压缩,默认同比例压缩操作

    vue+elementUI(el-upload)图片压缩,默认同比例压缩操作

    这篇文章主要介绍了vue+elementUI(el-upload)图片压缩,默认同比例压缩操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vuex状态管理数据状态查询与更改方式

    vuex状态管理数据状态查询与更改方式

    这篇文章主要介绍了vuex状态管理数据状态查询与更改方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue开发中关于axios的封装过程

    vue开发中关于axios的封装过程

    这篇文章主要介绍了vue开发中关于axios的封装过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 详解vue-router的Import异步加载模块问题的解决方案

    详解vue-router的Import异步加载模块问题的解决方案

    这篇文章主要介绍了详解vue-router的Import异步加载模块问题的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Vue启动失败报错:Module not found: Error: Can‘t resolve 'less-loader'解决

    Vue启动失败报错:Module not found: Error: Can‘t resolve &apos

    这篇文章主要给大家介绍了关于Vue启动失败报错:Module not found: Error: Can‘t resolve 'less-loader'解决的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • Vue 中如何正确引入第三方模块的方法步骤

    Vue 中如何正确引入第三方模块的方法步骤

    这篇文章主要介绍了Vue 中如何正确引入第三方模块的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • vue搜索高亮popsearch组件的实现示例

    vue搜索高亮popsearch组件的实现示例

    有时候给页面内容添加一个关键词搜索功能,如果搜索结果能够像浏览器搜索一样高亮显示,那找起来就会很明显体验会好很多,本文就来介绍一下vue搜索高亮popsearch组件的实现示例,感兴趣的可以了解一下
    2023-09-09

最新评论