java依赖注入inject_Vue实战指南之依赖注入(provide / inject)

案例

UI美眉说咱家的选项菜单太丑了,小哥哥能不能美化一下呀,洒家自然是说小意思啦~

自定义一个select组件,so easy~

简单粗暴型:

option作为数据进来就ok啦。

然后发现下列问题:

key-value,不是所有的接口都是id-name

option要disabled 怎么办?

option存在几种情况怎么办?

...

回头看看原生的写法是这样:

Vue

React

Angular

还要加个el-option组件,灵活自由型:

Vue

React

Angular

好啦,这样设计就能完美解决之前的几个问题。

接着要解决选择了某一个el-option,怎么告诉el-select,$parent是一种选择,那么el-select当前的值又怎么告诉el-option你被选中了呢~ 笔者没有继续去深究,因为看到了APIprovide/inject

官方说明:

允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深(这也是使用$parent不好实现的地方),并在起上下游关系成立的时间里始终生效。

不论组件层次有多深,这个简直太爽了,不用再关心dom层级,只要在祖先组件内部就可以一直使用祖先组件提供的provide

用法

下面贴出一部分select的实现:

provide:Object | () => Object

inject:Array | { [key: string]: string | Symbol | Object }

el-select

export default {

name: "el-select",

provide() {

return {

select: this

};

}

}

el-option

export default {

name:'el-option',

inject:['select'],

created(){

if(this.select.value===this.value){

this.select.label=this.label;

}

}

}

总结

provide/inject 是解决组件之间的通信问题的利器,不受层级结构的限制。

但也不是随便去滥用,通信代表着耦合:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值