vue2.0與3.0中的provide和inject 用法


1、provide/inject有什么用?

  常用的父子組件通信方式都是父組件綁定要傳遞給子組件的數據,子組件通過props屬性接收,一旦組件層級變多時,采用這種方式一級一級傳遞值非常麻煩,而且代碼可讀性不高,不便后期維護。

  vue提供了provideinject幫助我們解決多層次嵌套嵌套通信問題。在provide中指定要傳遞給子孫組件的數據,子孫組件通過inject注入祖父組件傳遞過來的數據。

使用場景:由於vue有$parent屬性可以讓子組件訪問父組件。但孫組件想要訪問祖先組件就比較困難。通過provide/inject可以輕松實現跨級訪問祖先組件的數據

2、provide/inject使用方式

  provide:是一個對象 / 返回對象的函數。

       里面是屬性和屬性值。

  注意:子孫層的provide會掩蓋祖父層provide中相同key的屬性值

  inject:一個字符串數組,或者是一個對象。

     屬性值可以是一個對象,包含fromdefault默認值,from是在可用的注入內容中搜索用的 key (字符串或 Symbol),意思就是祖父多層provide提供了很多數據,from屬性指定取哪一個key;

    default指定默認值。

具體用法:

  父組件

<template>
  <div>
 
  </div>
</template>

<script>
export default {
  components: {
    MergeTipDialog,
    BreakNetTip
  },
  data () {
    return {
      isShow: false,
      isRouterAlive: true
  },

// 父組件中返回要傳給下級的數據  可以使函數,也可以是data中的數據
  provide () {
    return {
      reload: this.reload
    isShow:this.isShow } }, methods: { reload () {
this.isRouterAlive = false this.$nextTick(() => { this.isRouterAlive = true }) } } } </script>

子孫

<template>
  <popup-assign
    :id="id"
    @success="successHandle"
  >
    <div class="confirm-d-tit"><span class="gray-small-btn">{{ name }}</span></div>
    <strong>將被分配給</strong>
    <a
      slot="reference"
      class="unite-btn"
    >
      指派
    </a>
  </popup-assign>
</template>
<script>
import PopupAssign from '../PopupAssign'
export default {
//引用vue reload方法 內容 isShow
  inject: ['reload','isShow'],
  components: {
    PopupAssign
  },
methods: {
    async successHandle () {
      this.reload()
    }
  }
}
</script>

vue3.0用法

父組件

 

 子組件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM