支付宝小程序父子组件相互调用

组件调用方式与vue类似,但是还是有一些区别,记录一下。

父组件传值给子组件

1
2
3
4
5
6
7
8
// 父组件
<child-name title="title"/>

//子组件
props:{
title:''
}
<view>{{title}}</view>

子组件调用父组件方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 子组件
props:{
onYourMethod:()=>({})
}
methods:{
onTapSubmit(){
this.props.onYourMethod('from child')
}
}
// 父组件
<child-name onTapSubmit="fatherMethod" />

fatherMethod(e){
console.log(e) // from child
}

父组件调用子组件方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 父组件
<child-name ref='childRefName' />

childRefName(ref){
this.ref=ref
}
youFun(){
this.ref.childMethod('from father')
}

// 子组件
methods:{
childMethod(e){
console.log(e) //from father
}
}

使用ref时需要开启component2 不然ref不会生效

兄弟组件相互调用

大致思路是这样的:组件A -> 父组件 -> 组件B

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// 子组件A
props:{
onEmitToBrother:()=>({})
}
methods:{
onTapAButton(){
this.props.onEmitToBrother('refB','comBFun','from A')
},
comAFun(e){
console.log(e) // from B
}
}

// 子组件B
// 子组件A
props:{
onEmitToBrother:()=>({})
}
methods:{
onTapBButton(){
this.props.onEmitToBrother('refA','comAFun','from B')
},
comBFun(e){
console.log(e) // from A
}
}

// 父组件
<A-name onEmitToBrother="onEmitToBrother" ref="refA" />
<B-name onEmitToBrother="onEmitToBrother" ref="refB" />


refA(ref){
this.refA=ref
}
refB(ref){
this.refB=ref
}
onEmitToBrother(refName,funName,args){
this[refName][funName](args)
}

如果有其他更好的方案 欢迎补充

文章作者: Joker
文章链接: https://qytayh.github.io/2021/08/%E6%94%AF%E4%BB%98%E5%AE%9D%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%88%B6%E5%AD%90%E7%BB%84%E4%BB%B6%E7%9B%B8%E4%BA%92%E8%B0%83%E7%94%A8/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joker's Blog