作用
我们在之前学习的那些控件中,各有特点,也各有缺陷,至今没有痛痛快快的出现过真正能跨组件的双向绑定的装饰器。
比如
- @Local装饰器,不能跨组件
- @Param装饰器呢,能跨组件传递,但是仅仅就是下一层组件接收参数。另外,它是单向传递,不可被重新赋值。如果您非要改值则用@Once修饰,改了父组件也不会同步。非要达成双向传递的效果,那就搞个@Event写回调函数,让父组件实现,完成改值的能力。比较麻烦。
我们有时候需要一种能力是,对于组件而言。爷爷组件直接传给孙子组件,父组件不需要某状态变量。并且孙子组件如果改了值,或者爷爷组件改了值,双向同步给彼此。从而是界面刷新逻辑正常。
这个@Provider和@Consumer装饰器的配合使用,就是来完成这种效果的。
使用方式
介绍
@Provider需要与@Consumer配合使用。两者通过一个key建立联结。此key表现在,这两个装饰器都接收一个叫aliasName的参数,用来指定其修饰的变量的别名。之后靠这个别名来寻找绑定关系。
@Provider属性装饰器 |
说明 |
装饰器参数 |
aliasName?:string, 别名,缺省时默认为属性名,建议最好写这个参数 |
支持类型 |
自定义组件中成员变量。属性类型可以为number,string, boolean, class, Array, Date, Map, Set 等类型。支持装饰箭头函数。 |
从父组件初始化 |
禁止 |
本地初始化 |
必须本地初始化 |
观察能力 |
能力等同于@Trace。变化同步给对应的@Consumer |
@Consumer属性装饰器 |
说明 |
装饰器参数 |
aliasName?:string, 别名,缺省时默认为属性名,向上查找最近的@Provider,建议最好写这个参数 |
可装饰的变量 |
自定义组件中的成员变量。属性的类型可以是number,string,boolean,Data,Array,Map,Set等类型,支持箭头函数。 |
从父组件初始化 |
禁止 |
本地初始化 |
必须本地初始化 |
观察能力 </ |