1. 程式人生 > >微信小程式——父子元件傳參以及方法的呼叫

微信小程式——父子元件傳參以及方法的呼叫

父元件向子元件傳參

A元件為父元件,B元件為子元件,以下是A元件向B元件傳參

在A元件中引入B元件(父元件引入子元件)

在A元件的json中寫入(父元件):

{
    "component": true,
    "usingComponents": {
       "componentB": "../child/child"
    }
}

在A元件的wxml中寫入(父元件):

<view>我是元件A</view>
<view>
   <view>子元件內容:</view>
   <componentB paramAtoB='我是父元件向子元件傳的引數'/>
</view>

在B元件的js中寫入(子元件): 

Component({
    behaviors: [],
    properties: {  //即在properties中定義父元件要傳過來的引數型別,與vueprops類似
        paramAtoB:String
    },
    data: {},  

    // 生命週期函式,可以為函式,或一個在methods段中定義的方法名
    attached: function () { },
    moved: function () { },
    detached: function () { },

    methods: {
 
    }
})

在B元件的wxml中寫入(子元件):

<view style='border:2px solid gray;'>
  <view style='text-align:center;'>我是子元件B</view>
  <view>A中傳入的引數:{{paramAtoB}}</view>
</view>

總結: A元件向B元件傳參,實際上就是在A元件中引入B元件的時候,帶上一個屬性paramAtoB,並且給其賦值,然後B元件通過這個屬性名稱paramAtoB,獲取其值

或者   在methods

的自定義函式裡面通過this.data.paramAtoB就能接收到

呼叫子元件方法

父元件引子元件  component-name,然後通過id來呼叫方法(注:此案例與上面案例沒任何聯絡)

<component-name id="componentId"></component-name>
onload(){
    this.selectComponent("#componentId").subComponentMethod();
}

 

子元件向父元件傳參

要讓子元件給父元件傳參,首先得在父元件引入子元件的時候,加個觸發事件,如下:


在子元件B中wxml:

<view style='border:2px solid gray;'>
    <view style='text-align:center;'>我是元件B</view>
    <view>A中傳入的引數:{{paramAtoB}}</view>
    <button bindtap='change'>向A中傳入引數</button>
</view>

button按鈕點選事件一觸發,就可以傳入引數進入父元件A中,在子元件B中js:

Component({
    behaviors: [],
    properties: {
        paramAtoB:String
    },
    data: {}, 
 
    // 生命週期函式,可以為函式,或一個在methods段中定義的方法名
    attached: function () { },
    moved: function () { },
    detached: function () { },
 
    methods: {
        change:function(){
            this.triggerEvent('myevent', { paramBtoA:123});
        }
    }
})

在父元件A中wxml:

<view style='padding:20px;border:2px solid red;'>
    <view style='text-align:center;'>我是元件A</view>
    <view>
        <view>A元件內容:</view>
        <view>B元件傳入引數:{{paramBtoA}}</view><!--myevent就是繫結的觸發事件-->
        <componentB paramAtoB='我是A向B中傳入的引數' bind:myevent="onMyEvent"/>
    </view>
</view>

在父元件A中js:

Component({
    behaviors: [],
    properties: {
 
    },
    data: {}, 

    // 生命週期函式,可以為函式,或一個在methods段中定義的方法名
    attached: function () { },
    moved: function () { },
    detached: function () { },
 
    methods: {
        onMyEvent:function(e){   //onMyEvent就是當被子元件觸發時的函式
            this.setData({
                paramBtoA: e.detail.paramBtoA
            })
        }
    }
})

 

另外介紹:

比如子元件中一個輸入框的值

<input type='number' bindinput="bindCode" style='width:200rpx;height:98rpx' value='{{codes}}'></input> 

我們在子元件中的method中定義一個函式,即wxml中bindinput的bindCode方法:

bindCode: function (e) {
      var that = this;
      var val = e.detail.value; //通過這個傳遞資料
      var myEventDetail = {
        val: val
      } // detail物件,提供給事件監聽函式
      this.triggerEvent('myevent', myEventDetail) //myevent自定義名稱事件,父元件中使用
}

父元件要獲取:

**bind:myevent="onGetCode"**父元件的定義事件(myevent是子元件傳遞過來的自定義事件名稱)
//事件函式 ,e.detail.val就是需要的值
onGetCode:function(e){
    this.setData({
      code:e.detail.val
    })
  },