微信小程序組件封裝

概述

本身封裝的一個比較簡單微信彈窗小組件,主要就是教會你們對微信小組件的用法和理解,由於微信小程序對組件介紹特別少,因此我就把本身的理解分享給你們。
html

一前言

相信你們在開發小程序時會遇到某個功能屢次使用的狀況,好比彈出框。這個時候你們首先想到的是組件化開發,就是把彈出框封裝成一個組件,而後哪裏使用哪裏就調用,對,看來你們都是有思路的人,可是要怎樣實現呢。可能你會去看官方文檔,可是微信的官方文檔也是說的不太清楚,因此寫起來也是很是痛苦。今天就和你們一塊兒開發微信組件,坐穩了,老司機要開車了。
node

二具體實現

咱們先實現個簡單的彈窗組件,詳情圖以下:
json


1.新建component文件夾存放咱們的組件,裏邊存放的就是咱們所用的組件,咱們今天要作的事彈出框,新建文件夾popup存放咱們的組件模板,點擊右鍵選擇新建component,就會自動生成組件的模板wxss、wxml、json、js,如圖小程序

2.咱們能夠寫一些組件樣式和佈局,跟頁面寫法相似,我就很少說了,直接把代碼貼出 :微信小程序

popup.wxmlapi

<view class="wx-popup" hidden="{{flag}}">  <view class='popup-container'>    <view class="wx-popup-title">{{title}}</view>    <view class="wx-popup-con">{{content}}</view>    <view class="wx-popup-btn">      <text class="btn-no" bindtap='_error'>{{btn_no}}</text>      <text class="btn-ok" bindtap='_success'>{{btn_ok}}</text>    </view>  </view></view>複製代碼

popup.wxssbash

/* component/popup.wxss */.wx-popup {  position: absolute;  left: 0;  top: 0;   width: 100%;  height: 100%;  background: rgba(0, 0, 0, .5);} .popup-container {  position: absolute;  left: 50%;  top: 50%;   width: 80%;  max-width: 600rpx;  border: 2rpx solid #ccc; border-radius: 10rpx; box-sizing: bordre-box; transform: translate(-50%, -50%); overflow: hidden; background: #fff;} .wx-popup-title { width: 100%; padding: 20rpx; text-align: center; font-size: 40rpx; border-bottom: 2rpx solid red;} .wx-popup-con { margin: 60rpx 10rpx; text-align: center;} .wx-popup-btn { display: flex; justify-content: space-around; margin-bottom: 40rpx;} .wx-popup-btn text { display: flex; align-items: center; justify-content: center; width: 30%; height: 88rpx; border: 2rpx solid #ccc; border-radius: 88rpx;}複製代碼

樣式和佈局和佈局已經寫好了接下來要介紹的就是
微信

Component構造器

Component構造器可用於定義組件,調用Component構造器時能夠指定組件的屬性、數據、方法等。app

定義段 類型 是否必填 描述
properties Object Map 組件的對外屬性,是屬性名到屬性設置的映射表,屬性設置中可包含三個字段, type 表示屬性類型、 value 表示屬性初始值、 observer表示屬性值被更改時的響應函數
data Object 組件的內部數據,和 properties 一同用於組件的模版渲染
methods Object 組件的方法,包括事件響應函數和任意的自定義方法,關於事件響應函數的使用,參見 組件事件
behaviors String Array 相似於mixins和traits的組件間代碼複用機制,參見 behaviors
created Function 組件生命週期函數,在組件實例進入頁面節點樹時執行,注意此時不能調用 setData
attached Function 組件生命週期函數,在組件實例進入頁面節點樹時執行
ready Function 組件生命週期函數,在組件佈局完成後執行,此時能夠獲取節點信息(使用 SelectorQuery
moved Function 組件生命週期函數,在組件實例被移動到節點樹另外一個位置時執行
detached Function 組件生命週期函數,在組件實例被從頁面節點樹移除時執行
relations Object 組件間關係定義,參見 組件間關係
externalClasses String Array 組件接受的外部樣式類,參見 外部樣式類
options Object Map 一些組件選項,請參見文檔其餘部分的說明

Tips:xss

  • Component 構造器構造的組件也能夠做爲頁面使用。

  • 使用 this.data 能夠獲取內部數據和屬性值,但不要直接修改它們,應使用 setData 修改。

  • 生命週期函數沒法在組件方法中經過 this 訪問到。

  • 屬性名應避免以 data 開頭,即不要命名成 dataXyz 這樣的形式,由於在 WXML 中, data-xyz="" 會被做爲節點 dataset 來處理,而不是組件屬性。

  • 在一個組件的定義和使用時,組件的屬性名和data字段相互間都不能衝突(儘管它們位於不一樣的定義段中)。

component介紹完後就是最爲關鍵的js了

popup.js:

Component({  options: {    multipleSlots: true // 在組件定義時的選項中啓用多slot支持  },  /**   * 組件的屬性列表   */  properties: {    title: {            // 屬性名      type: String,     // 類型(必填),目前接受的類型包括:String, Number, Boolean, Object, Array, null(表示任意類型)      value: '標題'     // 屬性初始值(可選),若是未指定則會根據類型選擇一個    },    // 彈窗內容    content: {      type: String,      value: '內容'    },    // 彈窗取消按鈕文字    btn_no: {      type: String,      value: '取消'    },    // 彈窗確認按鈕文字    btn_ok: {      type: String,      value: '肯定'    }   },   /**   * 組件的初始數據   */  data: {    flag: true,  },   /**   * 組件的方法列表   */  methods: {    //隱藏彈框    hidePopup: function () {      this.setData({        flag: !this.data.flag      })    },    //展現彈框    showPopup () {      this.setData({        flag: !this.data.flag      })    },    /*    * 內部私有方法建議如下劃線開頭    * triggerEvent 用於觸發事件    */    _error () {      //觸發取消回調      this.triggerEvent("error")    },    _success () {      //觸發成功回調      this.triggerEvent("success");    }  }})複製代碼

上邊會用到一個triggerEvent下面咱們就來介紹下:

自定義組件觸發事件時,須要使用 triggerEvent 方法,指定事件名、detail對象和事件選項。

觸發事件的選項包括:

選項名 類型 是否必填 默認值 描述
bubbles Boolean false 事件是否冒泡
composed Boolean false 事件是否能夠穿越組件邊界,爲false時,事件將只能在引用組件的節點樹上觸發,不進入其餘任何組件內部
capturePhase Boolean false 事件是否擁有捕獲階段

如今一個彈窗的組件就封裝好了接下來就是調用了。

調用的時候須要在調用的頁面新建一個json文件,json文件裏須要配置usingComponents就是引用組件,看代碼:

index.json

{  "usingComponents": {    "popup": "/component/popup/popup"  }}複製代碼

如今基本上完成了須要的就是在首頁引用了。

<!--index.wxml--><view class="container">  <view class="userinfo">    <button bindtap="showPopup"> 點我 </button>  </view>  <popup id='popup'       title='小組件'       content='學會了嗎'       btn_no='沒有'       btn_ok='學會了'      bind:error="_error"        bind:success="_success">  </popup></view>複製代碼

配置index.js加上點擊事件

//index.js//獲取應用實例const app = getApp() Page({  onReady: function () {    //得到popup組件    this.popup = this.selectComponent("#popup");  },   showPopup() {    this.popup.showPopup();  },   //取消事件  _error() {    console.log('你點擊了取消');    this.popup.hidePopup();  },  //確認事件  _success() {    console.log('你點擊了肯定');    this.popup.hidePopup();  }})複製代碼

一個彈窗組件就完成了,看下效果:

相關文章
相關標籤/搜索