微信小程序之自定義組件Component

一急鳄、新建conponents文件

新建一個 components 文件夾跃脊,用于存放我們以后開發(fā)中的所用組件愕乎,例如目的是實現(xiàn)一個 彈框 組件斗这,因此事扭,在 components 組件中新建一個 Dialog 文件夾來存放彈窗組件,在 Dialog 下右擊新建 Component 并命名為 dialog 后楞黄,會生成對應的 json wxml wxss js 4個文件池凄,也就是一個自定義組件的組成部分,此時項目結構應該如下圖所示:
二鬼廓、組件的相關配置及寫法

1.需要聲明自定義組件肿仑,也就是將 dialog.json 中 component 字段設為 true

{
  "component": true,        // 自定義組件聲明
  "usingComponents": {}     // 可選項,用于引用別的組件
}

2.需要在 dialog.wxml 文件中編寫彈窗組件模版碎税,在 dialog.wxss 文件中加入彈窗組件樣式尤慰,它們的寫法與頁面的寫法類似
dialog.wxml 文件:

<!--component/dialog/dialog.wxml-->
<view class='wx_dialog_container' hidden="{{!isShow}}">
    <view class='wx-mask'></view>
    <view class='wx-dialog'>
        <view class='wx-dialog-title'>{{ title }}</view>
        <view class='wx-dialog-content'>{{ content }}</view>
        <view class='wx-dialog-footer'>
          <view class='wx-dialog-btn' catchtap='_cancelEvent'>{{ cancelText }}</view>
          <view class='wx-dialog-btn' catchtap='_confirmEvent'>{{ confirmText }}</view>
        </view>
    </view>
</view>

dialog.wxss 文件:

/* components/Dialog/dialog.wxss */
.wx-mask{
position: fixed;
z-index: 1000;
top: 0;
right: 0;
left: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.3);
}
.wx-dialog{
position: fixed;
z-index: 5000;
width: 80%;
max-width: 600rpx;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
background-color: #FFFFFF;
text-align: center;
border-radius: 3px;
overflow: hidden;
}
.wx-dialog-title{
font-size: 18px;
padding: 15px 15px 5px;
}
.wx-dialog-content{
padding: 15px 15px 5px;
min-height: 40px;
font-size: 16px;
line-height: 1.3;
word-wrap: break-word;
word-break: break-all;
color: #999999;
}
.wx-dialog-footer{
display: flex;
align-items: center;
position: relative;
line-height: 45px;
font-size: 17px;
}
.wx-dialog-footer::before{
content: '';
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid #D5D5D6;
color: #D5D5D6;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.wx-dialog-btn{
display: block;
-webkit-flex: 1;
flex: 1;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
position: relative;
}
.wx-dialog-footer .wx-dialog-btn:nth-of-type(1){
color: #353535;
}
.wx-dialog-footer .wx-dialog-btn:nth-of-type(2){
color: #3CC51F;
}
.wx-dialog-footer .wx-dialog-btn:nth-of-type(2):after{
content: " ";
position: absolute;
left: 0;
top: 0;
width: 1px;
bottom: 0;
border-left: 1px solid #D5D5D6;
color: #D5D5D6;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleX(0.5);
transform: scaleX(0.5);
}

3.dialog.js文件
dialog.js 是自定義組件的構造器,是使用小程序中 Component 構造器生成的雷蹂,調用 Component 構造器時可以用來指定自定義組件的屬性伟端、數(shù)據(jù)、方法等匪煌,具體的細節(jié)可以參考一下官方的文檔

下面通過代碼注釋解釋一下構造器中的一些屬性的使用:

// components/Dialog/dialog.js
Component({
  options: {
    multipleSlots: true // 在組件定義時的選項中啟用多slot支持
  },
  /**
   * 組件的屬性列表
   * 用于組件自定義設置
   */
  properties: {
    // 彈窗標題
    title: {            // 屬性名
      type: String,     // 類型(必填)责蝠,目前接受的類型包括:String, Number, Boolean, Object, Array, null(表示任意類型)
      value: '標題'     // 屬性初始值(可選),如果未指定則會根據(jù)類型選擇一個
    },
    // 彈窗內容
    content :{
      type : String ,
      value : '彈窗內容'
    },
    // 彈窗取消按鈕文字
    cancelText :{
      type : String ,
      value : '取消'
    },
    // 彈窗確認按鈕文字
    confirmText :{
      type : String ,
      value : '確定'
    } 
  },

  /**
   * 私有數(shù)據(jù),組件的初始數(shù)據(jù)
   * 可用于模版渲染
   */
  data: {
    // 彈窗顯示控制
    isShow:false
  },

  /**
   * 組件的方法列表
   * 更新屬性和數(shù)據(jù)的方法與更新頁面數(shù)據(jù)的方法類似
   */
  methods: {
    /*
     * 公有方法
     */

    //隱藏彈框
    hideDialog(){
      this.setData({
        isShow: !this.data.isShow
      })
    },
    //展示彈框
    showDialog(){
      this.setData({
        isShow: !this.data.isShow
      })
    },
     /*
     * 內部私有方法建議以下劃線開頭
     * triggerEvent 用于觸發(fā)事件
     */
    _cancelEvent(){
      //觸發(fā)取消回調
      this.triggerEvent("cancelEvent")
    },
    _confirmEvent(){
      //觸發(fā)成功回調
      this.triggerEvent("confirmEvent");
    }
  }
})

如果方法需要傳遞參數(shù)萎庭,則:


三霜医、組件的使用

完成了一個自定義彈窗組件的大部分,可是保存后并沒有發(fā)現(xiàn)任何變化驳规,因為還需要在 dialogDemo.wxml 文件中引入它肴敛!
首先需要在 dialogDemo.json 中引入組件

{
  "usingComponents": {
    "dialog": "../../components/Dialog/dialog"
  }
}

然后在 dialogDemo.wxml 中引入它,并增加自定義的一些值吗购,如下:

<!--pages/dialogDemo/dialogDemo.wxml-->
<view class="container">
    <dialog id='dialog' 
      title='我是標題' 
      content='恭喜你医男,學會了小程序組件' 
      cancelText='知道了' 
      confirm='謝謝你'
      bind:cancelEvent="_cancelEvent"  
      bind:confirmEvent="_confirmEvent">
    </dialog>
    
    <button type="primary" bindtap="showDialog"> ClickMe! </button>
</view>

最后一步, dialogDemo.js 配置

// pages/dialogDemo/dialogDemo.js
//獲取應用實例
const app = getApp()
Page({
  /**
   * 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
   */
  onReady: function() {
    //獲得dialog組件
    this.dialog = this.selectComponent("#dialog");
  },
  showDialog() {
    this.dialog.showDialog();
  },
  //取消事件
  _cancelEvent() {
    console.log('你點擊了取消');
    this.dialog.hideDialog();
  },
  //確認事件
  _confirmEvent() {
    console.log('你點擊了確定');
    this.dialog.hideDialog();
  }
})


原文:https://blog.csdn.net/rolan1993/article/details/78801052

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末捻勉,一起剝皮案震驚了整個濱河市镀梭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踱启,老刑警劉巖丰辣,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異禽捆,居然都是意外死亡,警方通過查閱死者的電腦和手機飘哨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門胚想,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芽隆,你說我怎么就攤上這事浊服⊥城” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵牙躺,是天一觀的道長愁憔。 經(jīng)常有香客問我,道長孽拷,這世上最難降的妖魔是什么吨掌? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮脓恕,結果婚禮上膜宋,老公的妹妹穿的比我還像新娘。我一直安慰自己炼幔,他們只是感情好秋茫,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乃秀,像睡著了一般肛著。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上跺讯,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天枢贿,我揣著相機與錄音,去河邊找鬼抬吟。 笑死萨咕,一個胖子當著我的面吹牛,可吹牛的內容都是我干的火本。 我是一名探鬼主播危队,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钙畔!你這毒婦竟也來了茫陆?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤擎析,失蹤者是張志新(化名)和其女友劉穎簿盅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揍魂,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡桨醋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了现斋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喜最。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖庄蹋,靈堂內的尸體忽然破棺而出瞬内,到底是詐尸還是另有隱情迷雪,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布虫蝶,位于F島的核電站章咧,受9級特大地震影響,放射性物質發(fā)生泄漏能真。R本人自食惡果不足惜赁严,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舟陆。 院中可真熱鬧误澳,春花似錦、人聲如沸秦躯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踱承。三九已至倡缠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茎活,已是汗流浹背昙沦。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留载荔,地道東北人盾饮。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像懒熙,于是被迫代替她去往敵國和親丘损。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容

  • 之前做小程序開發(fā)的時候工扎,對于開發(fā)來說比較頭疼的莫過于自定義組件了徘钥,當時官方對這方面的文檔也只是寥寥幾句,一筆帶過而...
    world_7735閱讀 10,266評論 2 11
  • 微信小程序中的組件 前言 之前做小程序開發(fā)的時候肢娘,對于開發(fā)來說比較頭疼的莫過于自定義組件了呈础,當時官方對這方面的文檔...
    一夢歐巴閱讀 732評論 0 1
  • 微信小程序中的組件 前言 之前做小程序開發(fā)的時候,對于開發(fā)來說比較頭疼的莫過于自定義組件了橱健,當時官方對這方面的文檔...
    Cryptic閱讀 82,506評論 44 106
  • 1.小程序起步 (1)點擊https://mp.weixin.qq.com/wxopen/waregister?a...
    GXW_Lyon閱讀 3,313評論 0 0
  • 今天早上下班回到家六點多了拘荡,老大已經(jīng)吃完飯了笨忌,等我回到家爺爺吃完飯把他送去上學,下午回家自己寫作業(yè),寫的拼音拼寫官疲,...
    仲昊惟閱讀 235評論 0 1