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正在更新已渲染过的元素列表时,它默认用“就地复用”策略,如果数据项的顺序被改变,Vue将不会移动D
一、vue.js devtools开发工具的使用
1、安装
在chrome或firefox浏览器的扩展插件仓库里搜索vue devtool。
2、debugger的使用
假设我们想调试App.vue这
ref被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的$refs对象上。如果在普通的DOM元素上使用,引用指向的就是DOM元素,如果用在子组件上,引用就指向组件实例。
<!-- `vm.$
在使用Vue中经常看到HTML中有标签属性前面添加了“:”,有些没有。
其实是v-bind的缩写。
v-bind
缩写: ‘:’
用法:动态绑定一个或多个特性,或一个组件prop到表达式。在绑定cl
一、概述
Vuex是一个专门为Vue.js应用程序开发的全局状态管理功能。它采用集中式存储管理应用的所有组件的状态, 并以相应的规则保证状态以一种可预测的方式发生变化。
每一个Vuex应用的核心就是s