浅析vue中的provide / inject 有什么用处

yizhihongxing

提供/注入(Provide / Inject)是Vue.js中的一个高级特性,允许祖先组件通过一个透明的接口向后代组件注入依赖项。在这个过程中,依赖注入是通过一个专用的上下文对象进行的。这种上下文对象作为依赖被传递到了需要访问依赖的子组件中。本攻略将介绍Vue中provide/inject的用处、使用方法以及示例说明。

使用方法

在祖先组件中,使用provide选项声明你想提供给后代的依赖。

export default {
  provide: {
    foo: 'this is a foo value',
  }
}

在后代组件中,通过inject选项来指定一个数组它所依赖的祖先组件的令牌(token)。

export default {
  inject: ['foo'],
  created() {
    console.log(this.foo)
  }
}

应用场景

provide/inject的主要作用就是将依赖项注入到需要的组件中,特别是那些深层次嵌套的组件,比如:

  • 国际化,通过provide在最外层的组件中提供当前语言变量,在内部嵌套的子组件中可以通过inject来获取当前语言变量,而不需要每个组件都进行引用。
  • 主题色,通过provide在最外层的组件中提供当前主题变量,在内部嵌套的子组件中可以通过inject来获取主题色变量,而不需要每个组件都进行引用。
  • 数据请求,通过在根组件中使用provide来注入当前用户信息,然后在任何子组件中都可以通过inject来获取用户信息,而不需要每个组件都进行操作。

下面我们来看一下具体的实例:

Demo1:

在最外层的组件中为当前应用设置主题色,然后在嵌套的子组件中通过inject来使用主题色变量。

<!-- 根组件 -->
<template>
  <div :style="{color: themeColor}">
    <!-- 嵌套子组件 -->
    <app-child></app-child>
  </div>
</template>
<script>
import Child from './Child.vue'

export default {
  provide: {
    themeColor: 'red',
  },
  components: { Child },
}
</script>

<!-- 嵌套组件 -->
<template>
  <span>我是一个嵌套组件,当前主题色是{{themeColor}}</span>
</template>
<script>
export default {
  inject: ['themeColor'],
}
</script>

这个例子中,我们将应用的主题色定义在了根组件中,然后通过provide来向后代组件提供值。在嵌套子组件中,我们首先使用inject来声明依赖,然后在模板中就可以使用注入的数据了。

Demo2:

下面的实例中,我们通过 provide 和 inject 把 url 参数从 UsersIndex 传递到了 UsersShow 组件。

<!-- UsersIndex 组件 -->
<template>
  <div>
    <ul>
      <li v-for="user in users" :key="user.id">
        <router-link :to="{ name: 'users.show', params: { id: user.id }}" :url="user.url">{{ user.name }}</router-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      users: [
        { id: 1, name: '张三', url: 'https://jsonplaceholder.typicode.com/users/1' },
        { id: 2, name: '李四', url: 'https://jsonplaceholder.typicode.com/users/2' },
        { id: 3, name: '王五', url: 'https://jsonplaceholder.typicode.com/users/3' }
      ]
    }
  }
}
</script>

<!-- UsersShow 组件 -->
<template>
  <div>
    <span>{{ user.name }}</span>
    <a :href="url">{{ user.email }}</a>
  </div>
</template>

<script>
export default {
  inject: ['url'],
  computed: {
    user() {
      return this.$api.get(this.url).then(response => {
        return response.data
      })
    }
  }
}
</script>

这个例子非常简单,我们传递了用户的 url 参数,并用它实现了 users/show 页面的数据请求操作。其中,在 UsersIndex 组件中,我们使用 provide 方法将 url 参数提供给了后代组件 UsersShow,而在 UsersShow 组件中,我们使用 inject 方法将 url 参数注入到了子组件中。

这样做使得代码的可读性更高、容易维护。我们不需要在每个子组件中都手动引入 url 参数,而是通过 provide/inject 机制将参数传递给它们。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析vue中的provide / inject 有什么用处 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • vant 时间选择器–开始时间和结束时间实例

    vant 时间选择器是一个基于Vue.js的组件库,其中包含了常用的时间选择器组件。下面就详细讲解vant 时间选择器的开始时间和结束时间实例的攻略。 一、引入组件 在使用 vant 时间选择器组件之前,需要先在项目中引入这个组件库。 <!– 引入样式文件 –> <link rel="stylesheet" href…

    Vue 2023年5月29日
    00
  • vue使用map代替Aarry数组循环遍历的方法

    下面是关于使用map代替Array数组循环遍历的方法的详细攻略。 1. 什么是map map是JavaScript原生的数组方法,它可以用于对数组中每个元素进行操作,并返回一个新的数组。 2. map的使用方法 map方法接受一个函数作为参数,函数中包含两个参数,分别是当前遍历到的元素以及当前元素的索引。 语法如下: arr.map(callback(cur…

    Vue 2023年5月27日
    00
  • 关于Vue 监控数组的问题

    关于Vue 监控数组的问题,我们可以通过 Vue 中的 computed 属性和 watch 属性来完成监控数组的操作。 监听数据的变化 Vue 提供了一种方法,以便自动跟踪数组的变化。这个方法是使用 Vue.set 或者是修改数组的长度来改变数组变化。在这个方法之后,组件会自动地更新记录数组。在实际应用中,我们常常使用 Array.push()、Array…

    Vue 2023年5月28日
    00
  • 在Vue里如何把网页的数据导出到Excel的方法

    在Vue中如何把网页的数据导出到Excel在很多情况下都是必须的,下面给出一种基于js-xlsx的实现方式: 步骤1:安装js-xlsx 在Vue项目中安装js-xlsx,可以使用npm安装: npm install xlsx –save 或者使用bower安装: bower install js-xlsx –save 步骤2:编写Vue组件 Vue组件…

    Vue 2023年5月27日
    00
  • Vue实现双向绑定的方法

    Vue实现双向绑定的方法主要有以下两种: 1. 使用v-model指令 Vue中提供了v-model指令,这是用于实现表单元素双向绑定的最简单方式。v-model可以用于input、textarea、select等表单元素,可以简洁地实现数据的双向绑定,不需要手动监听事件。 我们来看一个输入框的示例,实现输入框中的内容实时展示在页面上,同时页面上对该值的修改…

    Vue 2023年5月28日
    00
  • Vue时间轴 vue-light-timeline的用法说明

    Vue时间轴 vue-light-timeline的用法说明 什么是Vue时间轴 vue-light-timeline Vue时间轴 vue-light-timeline是一个基于Vue.js的时间轴组件库,简单易用且高度自定义。 安装 使用npm命令进行安装: npm install vue-light-timeline –save 如何使用 引入 在V…

    Vue 2023年5月28日
    00
  • vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)

    下面是实现分环境打包的步骤: 步骤一:配置不同环境的参数 在Vue项目中,我们可以通过创建不同的环境变量文件来配置不同环境中的参数。比如我们可以通过创建.env.development、.env.production、.env.test等文件分别配置开发环境、生产环境和测试环境的参数。其中以VUE_APP_前缀的变量可以在项目中通过process.env对象…

    Vue 2023年5月28日
    00
  • Vue路由传参详细介绍

    让我们来详细讲解 “Vue路由传参详细介绍”的完整攻略。 Vue路由传参的方式 Vue Router 提供了多种传参的方式: 动态路由传参 查询参数传参 props传参 这三种方式各有优缺点,下面我们逐个介绍。 1. 动态路由传参 动态路由传参是通过路由配置中的参数来传递数据的方式。例如: const router = new VueRouter({ rou…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部