1. 程式人生 > >小程式 - 元件

小程式 - 元件

詳情參考微信官方文件 - 基礎元件

元件化開發,將專案中多次用到的功能模組單獨做成一個元件,這樣有利於程式碼複用、也便於修改維護。

小程式也支援元件化開發,使用元件常見的操作有:向元件傳值呼叫元件中的方法元件向上級傳值元件觸發上級中的方法

生成元件檔案

通常,我會建立一個名為component的資料夾,用來存放元件。右鍵component資料夾,選擇“新建Component”

輸入元件名稱後,會自動生成以下檔案

使用元件

例如,我在pages/page1頁面中,如何使用component/myComp元件

需要開啟page1下的page1.json檔案進行元件配置,如下圖所示

page1.json程式碼如下:

{
  "navigationBarTitleText": "page1",
  "usingComponents": {
    "mycomp": "../../component/myComp/myComp"
  }
}

myComp.wxml檔案程式碼

<view>我是子元件</view>

在page1.wxml中使用mycomp元件

<view>
  <view>我是父元件</view>
  <mycomp></mycomp>
</view>

編譯之後看到的效果

 

向元件傳值

page1.wxml檔案程式碼如下:

<view>
  <view>我是父元件</view>
  <mycomp pass-data="1"></mycomp>
</view>

屬性需要用連線符 連線:pass-data;在myComp.js中的properties屬性中接收(接收時,需要轉化為駝峰命名法)

type表示接收的資料型別(String、Object、Array等),value表示預設值

元件中通過this.data.passData獲取上級傳遞的值

呼叫元件中的方法

在myComp.js中新增自定義sonMethod()方法

在page1.wxml中繫結callSonMethod()方法,用來觸發元件事件,併為子元件賦id值

<view>
  <view catchtap="callSonMethod">我是父元件</view>
  <mycomp id="mycomp" pass-data="1"></mycomp>
</view>

在page1.js中,宣告callSonMethod()方法

callSonMethod () {
  console.log("我是父元件的方法,即將呼叫子元件中的方法");

  let mycomp = this.selectComponent("#mycomp");
  
  // 呼叫子元件的方法
  mycomp.sonMethod();
},

觸發callSonMethod()方法,控制檯列印內容如下

除了可以呼叫元件的方法,還可以修改元件properties中的屬性

let mycomp = this.selectComponent("#mycomp");

// 設定元件properties中passData的值
mycomp.setData({
  passData: 2
});

元件觸發上級的方法向上級傳值

在page1.wxml中,需要繫結元件將觸發的事件,以及事件觸發的方法

<view>
  <view catchtap="callSonMethod">我是父元件</view>
  <mycomp id="mycomp" pass-data="1" bind:fm="fatherMethod"></mycomp>
</view>

page1.js中fatherMethod()程式碼:

fatherMethod (data) {
  console.log("我是父元件的方法,由子元件觸發");
  console.log("我是父元件的方法,接收到子元件傳遞的值為", data);
},

fm為元件觸發的事件,fatherMethod()為page1.js宣告的事件

myComp.wxml程式碼:

<view catchtap="sonMethod">我是子元件</view>

myComp.js程式碼:

sonMethod () {
  let data = {
    'id': 1,
    'name': 'root'
  };

  this.triggerEvent('fm', data);
},

元件通過tiggerEvent事件,觸發page1.wxml中繫結在fm中的fatherMethod(data)方法,通過引數data,獲取元件傳遞的值,控制檯列印結果如下:

可以看到,傳遞的值在data.detail中