vue高阶用法之provide与inject

Posted hongyungo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue高阶用法之provide与inject相关的知识,希望对你有一定的参考价值。

1、这个两个必须同时使用,当父组件定义的方法,子组件也想使用怎么办了,这时候就可以派上用场了

provide:Object | () => Object
inject:Array<string> | { [key: string]: string | Symbol | Object }

父组件中

<template>
  <div
    id="app"
  >
    <router-view
      v-if="isRouterAlive"
    />
  </div>
</template>

<script>
export default {
  name: ‘App‘,
  components: {
  
  },
  data () {
    return {
      isShow: false,
      isRouterAlive: true
  },

// 父组件中返回要传给下级的数据
  provide () {
    return {
      reload: this.reload
    }
  },
  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方法
  inject: [‘reload‘],
  components: {
    PopupAssign
  },
methods: {
    // ...mapActions([‘freshList‘]),
    async successHandle () {
      this.reload()
    }
  }
}
</script>

 这样就实现了子组件调取reload方法就实现了刷新vue组件的功能,个人认为它实现了组件跨越组件传递数据方法。 

以上是关于vue高阶用法之provide与inject的主要内容,如果未能解决你的问题,请参考以下文章

[转]浅谈vue中provide和inject 用法

[Vue + TS] Use Dependency Injection in Vue Using @Inject and @Provide Decorators with TypeScript(代码片

vue组件之间通信(provide/inject与$attrs/$listeners) 之四

vue之$children和$parent, provide和inject用法以及使用style的方式 显示背景图片

[转]VUE3中的Provide / Inject用法

vue 3 学习笔记 ——provide 和 inject 用法及原理