开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
开发 > 框架 > 自定义组件 > 组件间关系
贡献者
收藏
订阅更新
我的文档
设置
对于有相互关系的自定义组件而言,互相感知与通信往往比较复杂,基于此种情况引入了 relations 的定义,可以方便的解决此类问题。
如下:custom-formcustom-inputcustom-button 均为自定义组件,可通过以下示例代码来建立它们之间的关系。
html
复制代码
<custom-form>
<custom-input>custom-input>
custom-form>
功能要求
基础库 2.8.5 开始支持,若版本较低,建议采取 兼容处理。可通过 my.caniuse('conponent.relations') 进行判断。
同时需要在自定义组件构造器中显式开启。
javascript
复制代码
component({
options: {
// 启用组件间关系定义段
relations: true,
},
})
路径关联
javascript
复制代码
// custom-form.js
component({
relations: {
'./custom-input': {
type: 'child',
linked(target) {
// 每次有 input 插入时(attached 生命周期之后)执行,target 是 input 节点实例
},
linkchanged(target) {
// 每次有 input 移动后(moved 生命周期之后)执行,target 是 input 节点实例
},
unlinked(target) {
// 每次有 input 移除时(detached 生命周期之后)执行,target 是 input 节点实例
},
},
},
ready() {
// 同时提供 getrelationnodes 可查询当前定义的有序关系数组
console.log(this.getrelationnodes('./custom-input'));
},
})
// custom-input.js
component({
relations: {
'./custom-form': {
type: 'parent',
linked(target) {
// 每到插入到 form 时(attached 生命周期之后)执行,target 是 from 节点实例
},
linkchanged(target) {
// 每次移动后(moved 生命周期之后)执行,target 是 from 节点实例
},
unlinked(target) {
// 每次移除时(detached 生命周期之后)执行,target 是 from 节点实例
},
},
注意:
需要两个组件都定义 relations 才能建立关系。
parent 只能与 child 建立关系,ancestor 只能与 descendant 建立关系。
mixin 关联
当 input 使用了某个 mixin 时,也可以使用这个 mixin 来代替路径建立关系。
relations 定义段
名称
类型
必填
说明
type
string

与目标组件的相对关系。 可选值:parent child ancestor descendant。
linked
function

目标组件建立时触发,触发时机在组件 attached 生命周期之后。
linkchanged
function

目标组件移动时触发,触发时机在组件 moved 生命周期之后。
unlinked
function

目标组件销毁时触发,触发时机在组件 detached 生命周期之后。
target
string

根据组件使用的 mixin 来建立关系。
内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图