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

提供/注入(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日

相关文章

  • vue 中filter的多种用法

    下面是一份关于 Vue 中 filter 的多种用法的攻略。 简介 在 Vue 中,filter 是一种非常实用的功能,它可以让我们在模板中格式化数据。例如,在展示日期时,可以使用 Date Filter 将日期格式化为固定的格式,或者在展示价格时,可以使用 Currency Filter 将价格格式化为指定的货币单位。 Vue 中 Filter 的基本用法…

    Vue 2023年5月27日
    00
  • Vue中的组件注册方法及注意事项

    下面让我来为大家详细讲解一下“Vue中的组件注册方法及注意事项”的攻略。 组件注册方法 在 Vue 中,我们要使用组件,首先需要通过 Vue.component()方法来注册组件。该方法接受两个参数,第一个参数是组件名称,第二个参数是组件定义对象。具体方式如下: Vue.component(‘my-component’, { // 组件定义对象 }) 除了全…

    Vue 2023年5月27日
    00
  • vuex实现及简略解析(小结)

    Vuex实现及简略解析 Vuex是一个专为Vue.js设计的状态管理库,他采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。在大型的Vue.js应用程序中,多个组件之间共享同一状态,直接进行状态传递会比较麻烦。在这种情况下,我们可以使用Vuex。本文详细介绍了Vuex的实现和简略的解析。 Vuex简单介绍 Vuex提供…

    Vue 2023年5月28日
    00
  • Vue中定义全局变量与常量的各种方式详解

    下面将对“Vue中定义全局变量与常量的各种方式详解”的完整攻略进行讲解。 定义全局变量 使用Vue.prototype 我们可以使用Vue.prototype来定义全局变量。具体步骤如下: 在Vue实例化之前,通过Vue.prototype添加需要定义的全局变量 javascript Vue.prototype.$myVariable = ‘这是一个全局变量…

    Vue 2023年5月28日
    00
  • VUE中使用Vue-resource完成交互

    使用Vue-resource完成交互可以实现前端页面和后端服务器之间的数据交换和通信。下面是使用Vue-resource实现交互的完整攻略: 1. 安装Vue-resource 在使用Vue-resource前,首先要将其安装到Vue项目中,可以通过在命令行中执行以下命令进行安装: npm install vue-resource –save 2. 引入V…

    Vue 2023年5月28日
    00
  • vue slot与传参实例代码讲解

    本文将为大家详细讲解Vue中slot与传参的使用方法及实例代码讲解。 什么是Vue中的Slot 在Vue中,我们可以使用组件来构建我们的应用程序。组件允许我们将结构、样式和行为封装在一个可重用的组合单元中。 在某些情况下,我们需要一个组件在父组件中形成一个布局,在不了解内容的情况下。这时,Vue中的插槽(slot)就能派上用场。插槽提供了组件的一种占位符,允…

    Vue 2023年5月28日
    00
  • 对vue里函数的调用顺序介绍

    接下来我会详细讲解“对vue里函数的调用顺序介绍”的完整攻略。 1. Vue函数的调用顺序 Vue中的函数调用顺序有如下几种情况: beforeCreate(创建前): 这个阶段会在Vue实例初始化之后,数据观测之前被调用。在此阶段,我们无法访问到 data、computed、methods、watch中的任何属性。 created(创建后): 该阶段在实例…

    Vue 2023年5月28日
    00
  • JavaScript实现单击下拉框选择直接跳转页面的方法

    下面是JavaScript实现单击下拉框选择直接跳转页面的方法的完整攻略: 1. 使用下拉框 我们可以使用HTML中的<select>标签创建一个下拉框,并用<option>标签添加选项。然后,我们需要为选中的选项添加一个事件,以便在单击时跳转到相关的页面。 以下是一个示例,演示如何使用下拉框实现单击下拉框选择直接跳转页面的方法: &…

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