WeChat アプレットでは、コンポーネント間の通信を確立する 3 つの方法があります。
1. 親コンポーネントが子コンポーネントに値を渡す これは、親コンポーネントが指定した属性の値を子コンポーネントに設定することで実現される
サブコンポーネント wxml 内
<text>子组件中count的值:{
{num}}</text>
num は、対応する .js ファイルの属性です
Component({
/**
* 组件的属性列表
*/
properties: {
num:Number
}
- 親コンポーネント wxml 内
<my-test6 num="{
{s}}"></my-test6>
<View>~~~~~~~~~~~~~~</View>
<view>父组件count值为:{
{s}}</view>
対応する .js ファイルで data を定義します
data: {
s:1
}
このようにして、親コンポーネントの s の値 1 を子コンポーネントの属性 num に渡すことができます。
- 実行結果
2. 子コンポーネントは、イベントを通じて値を親コンポーネントに渡します。
次の 4 つのステップに分けられます。
- 親コンポーネントの js ファイルで、カスタム イベントを通じて子コンポーネントに渡される関数を定義します。
- 親コンポーネントの wxml ファイルで、カスタム イベントを使用して、前の手順で定義した関数参照を子コンポーネントに渡します。
- 子コンポーネントの js で、 this.triggerEvent('custom event name') を呼び出して、親コンポーネントにデータを送信します。
- 親コンポーネントのjsで、子コンポーネントから渡されたデータをe.detailで取得する
上記の手順の今日のコードを記述します
ステップ 1: 親コンポーネントの js ファイルで、関数を定義します。
syncCount(e){
}
ステップ 2: 親コンポーネントの wxml ファイルで、bind を使用して関数参照を子コンポーネントに渡します。
<my-test6 sum="{
{count}}" bind:sync="syncCount"></my-test6>
ステップ 3: 子コンポーネントの js で、 this.triggerEvent('custom event name') を呼び出して親コンポーネントにデータを送信します
addCount(){
this.setData({
num:this.properties.num + 1
})
this.triggerEvent('sync',{value:this.properties.num})
}
ステップ 4: 親コンポーネントの js で、子コンポーネントから e.detail を介して渡されたデータを取得します。
syncCount(e){
this.setData({
s:e.detail.value
})
}
効果を実感:
コンポーネント通信
3. 親コンポーネントは、子コンポーネントのインスタンスを取得して値を渡します
In the parent component, use this.selectComponent to get the instance of the child component. 子コンポーネント セレクターは、class または id のみを使用できます
親コンポーネントの wxml ファイルで、子コンポーネントのクラス セレクターを test6 として宣言します。
<my-test6 sum="{
{count}}" bind:sync="syncCount" class="test6"></my-test6>
親コンポーネントに対応するjsファイルは、子コンポーネントのインスタンスを取得した後、子コンポーネントのメソッドを呼び出すことができます
getChild(){
const child = this.selectComponent('.test6')
console.log(child)
child.addCount()
}