Vue 2.7 中,provide/inject 可以用于在父组件中向子组件传递数据。provide 提供一个对象,该对象中的属性将会被注入到子组件中,而 inject 接收一个数组,该数组中的元素是父组件提供的属性名称。

提供的数据可以是任何类型,包括对象和函数。在子组件中,使用 inject 获取父组件提供的数据,也可以使用响应式监听来监听这些数据的变化。

例如,假设有一个父组件 App 和一个子组件 Child,我们可以在 App 中提供一个名为 message 的属性,并在 Child 中使用 inject 获取该属性,并使用响应式监听来监听其变化:

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

<script>
  import Child from './Child.vue';

  export default {
    provide() {
      return {
        message: 'Hello, World!'
      };
    },
    components: {
      Child
    }
  };
</script>
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
  export default {
    inject: ['message'],
    data() {
      return {
        localMessage: this.message
      };
    },
    created() {
      this.$watch('message', (newVal, oldVal) => {
        this.localMessage = newVal;
      });
    }
  };
</script>

在上面的例子中,我们使用 provide 方法在 App 组件中提供了一个名为 message 的属性,并在 Child 组件中使用 inject 方法获取了该属性。在 Child 组件中,我们将 message 属性的值赋给了一个名为 localMessage 的局部变量,并使用 $watch 方法监听 message 的变化,一旦 message 发生变化,就将新的值赋给 localMessage。

需要注意的是,在使用 provide/inject 时,父组件提供的数据不会随着其自身的数据变化而响应式更新,因此需要手动监听。

Vue 2.7 中使用 provide/inject 及响应式监听传递数据

原文地址: http://www.cveoy.top/t/topic/lYgq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录