经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Vue.js » 查看文章
Vue?中?provide和inject的使用
来源:jb51  时间:2022/8/2 14:46:03  对本文有异议

前言

在Vue中我们可以很方便的通过父组件往子组件传递属性,Props是我们将数据传递到子组件的主要方式之一。例如,下面的代码,我们往子组件(PopularList )传递了属性 name,其值是Most Popular Posts。在PopularList中我们可以通过name访问数据。

  1. <PopularList name="Most Popular Posts" />

但是有时子组件中可以包含子组件,如果我们想将数据从父组件传递到孙子组件,最简单的方法就是使用provide/reject。这种方式的好处是:我们不需要将属性先传给子组件,再传给孙子组件。就像Parent → Child → GrandChild。我们可以简单地将它传递为Parent → Grandchild,

如下图所示:

Vue中如何使用provide和inject

如果你使用的是composition API。可以直接使用provide 方法传递任何形式的数据。

  1. <script setup>
  2. import { provide } from 'vue'
  3. provide('myKey', 'message');
  4. </script>

provide函数接收两个参数 - 值和键。上面的例子中,键是mykey,值是message。和props一样,这个是可以是对象,数字或其他任何有效类型的数据。使用ref,我们还可以将这个属性设置为响应式。

  1. <script setup>
  2. import { provide, ref } from 'vue'
  3. const message = ref('message');
  4. provide('myKey', message);
  5. </script>

如果使用的是Options API,则可以使用以下结构在组件中提供数据。

  1. export default {
  2. provide: {
  3. myKey: 'message'
  4. }
  5. }

在 Vue 中使用注入访问父数据

在上面的例子中,我们说明了如何在父组件中传值。我们在孙子组件中,该如何获取到这个值,我们可以使用inject来访问属性。

例如,假设我们有一个如下所示的 Vue 组件:

  1. <script setup>
  2. import { ref, provide } from 'vue'
  3. import ChildElement from './Child.vue';
  4. const message = ref('message');
  5. provide('myKey', message);
  6. </script>
  7. <template>
  8. <p>Hello World!</p>
  9. <ChildElement />
  10. </template>

然后是一个Child.vue看起来像这样的子组件:

  1. <script setup>
  2. import GrandChildElement from './GrandChildElement.vue';
  3. </script>
  4. <template>
  5. <GrandChildElement />
  6. </template>

在GrandChildElement中,我们可以访问myKey,因为我们在父级中provide了它。我们可以在 Child.vue中这样做,但我们也可以只使用inject。provide使我们能够从多个级别获取数据。要访问这些数据GrandChildElement,我们使用inject.

我们的GrandChildElement.vue文件可能看起来像这样:

  1. <script setup>
  2. import { inject } from 'vue'
  3. const message = inject('myKey')
  4. </script>

const message这里将返回文本message,因为这是我们设置myKey的provide。如果使用的是 Options API,则可以改为

  1. export default {
  2. inject: [ 'myKey' ],
  3. created() {
  4. // Can access this.myKey here
  5. }
  6. }

到此这篇关于Vue 中 provide和inject的使用的文章就介绍到这了,更多相关Vue provide和inject 内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号