简单介绍:当一个子组件需要用到父组件的父组件的某些参数。那么这个时候为了避免组件重复传参,使用vue的依赖注入是个不错的方法,直接在最外层组件设置一个
provide,内部不管多少嵌套都可以直接取到最外层的参数。
provide/inject可实现跨组件传值,数据的流只能是向下传递,其中父组件provide,子组件inject。provide : 必须在父组件进行使用,用来给后代组件注入依赖
(属性或方法)inject : 必须
在子组件进行使用,用来获取根组件定义的要跨组件传递的数据
但是要注意一个问题:父组件通过provide/inject向子组件传递属性值时有可能失败
1、父组件通过provide/inject向子组件传递方法不会有问题
父组件:先引入子组件,再注册子组件,provide作为一个方法给子组件注入方法
<script>
import mappingMmDict from './mappingMmDict'
export default {
components: {
mappingMmDict
}
provide() {
return {
getMm: this.getMm
}
}
}
</script>

子组件:注入属性或方法,inject后面用一个数组接收,使用属性或方法

<script>
export default {
inject: ["getMm"],
handleSelect(row) {
...
this.getMm(row.mmNo,this.id);
},
</script>

2、父组件通过provide/inject向子组件传递常量也不会有问题

provide() {
return {
"username": "周文豪"
}
}
inject: ["username"],
<el-form-item label="文化程度:">
<el-radio-group v-model="addForm.eduLevel">
<el-radio v-for="item in getEduLevelList()" :key="item.dictTypeId" :label=item.dictId>{{item.dictName+username}}</el-radio>
</el-radio-group>
</el-form-item>

3、父组件通过provide/inject向子组件传递从后台获取的数据就无法传递,此时只能将数据通过方法包装起来实现传递

父组件代码如下:

data () {
return {
isMedicareList: []
}
},
methods: {
getIsMedicareList(){
return this.isMedicareList
},
}
provide() {
return {
getIsMedicareList: this.getIsMedicareList
}
}

子组件代码:

inject: ["getIsMedicareList"],
<el-form-item label="是否有医保:">
<el-radio-group v-model="addForm.isMedicare">
<el-radio v-for="item in getIsMedicareList()" :key="item.dictId" :label=item.dictId>{{item.dictName}}</el-radio>
</el-radio-group>
</el-form-item>

父组件向子组件传递属性值时建议:通过父组件绑定自定义属性,然后在子组件中通过props来接收的方式。

父组件代码如下:

<node-addAndEdit ref="addAndEdit" :eduLevelList="eduLevelList" />

子组件代码如下:

props: ["eduLevelList"],

最新文章

  1. 学习SpringMVC——你们要的REST风格的CRUD来了
  2. 进制转换及API接口中的转换
  3. SDK
  4. The web application [] appears to have started a thread named [Abandoned connection cleanup thread] com.mysql.jdbc.AbandonedConnectionCleanupThread
  5. iOS App上线的秘密
  6. ios 计算缓存大小
  7. C# this和base
  8. 【阿里云产品公测】阿里云ACE配置全程图解,详细到不行!
  9. 430的启动,I/O中断
  10. poj1515--Street Directions(边的双连通)
  11. ajax获取后台传递的json数据
  12. Notification使用笔记
  13. 微信小程序开发者注册流程
  14. Java:print、printf、println的区别
  15. Effective Java 第三版——7. 消除过期的对象引用
  16. hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)
  17. PCB差分线学习
  18. Nginx log日志切割shell
  19. MySql两种存储引擎的区别
  20. PHP MYSQL 临时表的使用

热门文章

  1. ArrayList源码分析(JDK1.8)
  2. 牛客编程巅峰赛S1第5场 - 青铜&amp;白银 B.完全平方数的尾巴 (暴力)
  3. 使用Github+jsDelivr搭建图床和存储服务
  4. 2.Url重定向和重写
  5. [Golang]-2 Map关联数组与下划线(_)的意义
  6. DDL 数据定义语言
  7. MySQL 误删用户故障解决方案
  8. Keepalived+LVS实现LNMP网站的高可用部署
  9. Gitlab 快速部署及日常维护 (一)
  10. 缓冲区溢出实验 4 内存管理(类似于malloc free)