vue provide与inject的使用

阅读数:92 评论数:0

跳转到新版页面

分类

html/css/js

正文

一、理解(隔代传值)

1、简单的来说就是有父组件中通过provide来提供变量,然后在子组件中通过inject来注入变量。需要注意的是不论子组件有多深,只要调用了inject,那么就可以注入provide中的数据。

2、由于vue有$parent属性可以让子组件访问父组件,但孙组件想要访问祖先组件就比较困难。通过provide/inject可以轻松跨级访问父组件的数据。

3、类型

(1)语法

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

4、provide和inject绑定并不是可响应的,如果你传了一个可监听的对象,那么其对象的property还是可响应的,如果需要响应式,可以:

(1)传递的参数用一个方法返回

// 父组件
data() {
    return {
      name: "卷儿"
    }
  },
  provide: function() {
    return {
      newName: () => this.name
    }

// 子组件
inject: ['newName'],

(2)参数定义为一个对象

// 父组件
data() {
    return {
      obj: {
        name: "卷儿"
      }
    }
  },
  provide: function() {
    return {
    // 传递一个对象
      obj: this.obj
    }
  },
  
// 子组件
inject: ['obj'],

5、慎用provide、inject

如果有多个后代组件同时依赖于一个祖先组件提供的状态,那么只要有一个组件修改了该状态,那么所有组件都会受到影响。

二、代码解释

//父组件
provide: {
   user: 'John Doe'
 }
 --------------------
//子组件
inject: ['user']
//使用
console.log(this.user)

如果我们尝试在此处提供一些组件实例属性,这将不起作用。

 provide: {
    todoLength: this.todos.length // 将会导致错误 'Cannot read property 'length' of undefined`
  },

// 可以下面这种写法,但是数据不会响应变化
 provide() {
    return {
      todoLength: this.todos.length
    }
  },

 

 




相关推荐

1、安装依赖 npm install svg-sprite-loader --save-dev 2、配置build文件夹中的webpack.base.conf.js 3、在src/component

在列表渲染时使用key属性 当Vue.js用v-for正在更新已渲染过的元素列表时,它默认用&ldquo;就地复用&rdquo;策略,如果数据项的顺序被改变,Vue将不会移动D

一、vue.js devtools开发工具的使用 1、安装 在chrome或firefox浏览器的扩展插件仓库里搜索vue devtool。 2、debugger的使用 假设我们想调试App.vue这

在一些情况下,我们可能会需要对一个prop进行双向绑定,但它破坏了单向数据流。 在vue 2.3.0,重新引入了.sync修饰符,这是一个语法糖。 例子: <

&lt;div id="app"&gt; &lt;div v-on:click="dodo"&gt;

在登陆页的mouted生命周期方法中,添加 <pre class

ref被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的$refs对象上。如果在普通的DOM元素上使用,引用指向的就是DOM元素,如果用在子组件上,引用就指向组件实例。 <!-- `vm.$

在使用Vue中经常看到HTML中有标签属性前面添加了“:”,有些没有。 其实是v-bind的缩写。 v-bind 缩写: ‘:’ 用法:动态绑定一个或多个特性,或一个组件prop到表达式。在绑定cl

module.exports = { "plugins": { "postcss-import": {},

一、概述 Vuex是一个专门为Vue.js应用程序开发的全局状态管理功能。它采用集中式存储管理应用的所有组件的状态, 并以相应的规则保证状态以一种可预测的方式发生变化。 每一个Vuex应用的核心就是s