小程序自定義組件

微信小程序中的組件

前言

之前做小程序開發(fā)的時(shí)候,對(duì)于開發(fā)來說比較頭疼的莫過于自定義組件了,當(dāng)時(shí)官方對(duì)這方面的文檔也只是寥寥幾句式矫,一筆帶過而已,所以寫起來真的是非常非常痛苦R鄹采转!

好在微信小程序的庫從 1.6.3 開始,官方對(duì)于自定義組件這一塊有了比較大的變動(dòng)瞬痘,首先比較明顯的感覺就是文檔比以前全多了故慈,有木有0逍堋(小程序文檔),現(xiàn)在小程序支持簡(jiǎn)潔的組件化編程察绷,可以將頁面內(nèi)的功能模塊抽象成自定義組件干签,以便在不同的頁面中復(fù)用,提高自己代碼的可讀性克婶,降低自己維護(hù)代碼的成本筒严!

本篇文章就是手把手教你實(shí)現(xiàn)小程序中自定義組件,坐穩(wěn)啦~

具體實(shí)現(xiàn)

要做自定義組件情萤,我們先定一個(gè)小目標(biāo),比如說我們?cè)谛〕绦蛑袑?shí)現(xiàn)一下 WEUI 中的彈窗組件摹恨,基本效果圖如下筋岛。

WEUI彈框

Step1

我們初始化一個(gè)小程序(本示例基礎(chǔ)版本庫為 1.7 ),刪掉里面的示例代碼晒哄,并新建一個(gè)components文件夾睁宰,用于存放我們以后開發(fā)中的所用組件,今天我們的目的是實(shí)現(xiàn)一個(gè) 彈框 組件寝凌,因此柒傻,我們?cè)赾omponents組件中新建一個(gè)Dialog文件夾來存放我們的彈窗組件,在Dialog下右擊新建Component并命名為dialog后较木,會(huì)生成對(duì)應(yīng)的json wxml wxss js4個(gè)文件红符,也就是一個(gè)自定義組件的組成部分,此時(shí)你的項(xiàng)目結(jié)構(gòu)應(yīng)該如下圖所示:

項(xiàng)目結(jié)構(gòu)

Step2

組件初始化工作準(zhǔn)備完成伐债,接下來就是組件的相關(guān)配置预侯,首先我們需要聲明自定義組件,也就是將dialog.json中component字段設(shè)為true:

{"component":true,// 自定義組件聲明"usingComponents": {}// 可選項(xiàng)峰锁,用于引用別的組件}

其次萎馅,我們需要在dialog.wxml文件中編寫彈窗組件模版,在dialog.wxss文件中加入彈窗組件樣式虹蒋,它們的寫法與頁面的寫法類似糜芳,我就不贅述,直接貼代碼啦~

dialog.wxml文件如下:

{{ title }}{{ content }}{{ cancelText }}{{ confirmText }}

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:15px15px5px;}.wx-dialog-content{padding:15px15px5px;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:1pxsolid#D5D5D6;color:#D5D5D6;-webkit-transform-origin:00;transform-origin:00;-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:1pxsolid#D5D5D6;color:#D5D5D6;-webkit-transform-origin:00;transform-origin:00;-webkit-transform:scaleX(0.5);transform:scaleX(0.5);}

step3

組件的結(jié)構(gòu)和樣式都有了魄衅,還缺少什么呢峭竣,沒錯(cuò),還缺js徐绑, 眼睛比較犀利的同學(xué)邪驮,可能已經(jīng)發(fā)現(xiàn)了我們?cè)赿ialog.wxml文件中的會(huì)有一些比如{{ isShow }}、{{ title }}這樣的模版變量傲茄,還定義了_cancelEvent和_confirmEvent兩個(gè)方法毅访,其具體實(shí)現(xiàn)就是在dialog.js中沮榜。

dialog.js是自定義組件的構(gòu)造器,是使用小程序中Component構(gòu)造器生成的喻粹,調(diào)用Component構(gòu)造器時(shí)可以用來指定自定義組件的屬性蟆融、數(shù)據(jù)、方法等守呜,具體的細(xì)節(jié)可以參考一下官方的文檔

下面我通過代碼注釋解釋一下構(gòu)造器中的一些屬性的使用:

// components/Dialog/dialog.jsComponent({options: {multipleSlots:true// 在組件定義時(shí)的選項(xiàng)中啟用多slot支持},/**

? * 組件的屬性列表

? * 用于組件自定義設(shè)置

? */properties: {// 彈窗標(biāo)題title: {// 屬性名type:String,// 類型(必填)型酥,目前接受的類型包括:String, Number, Boolean, Object, Array, null(表示任意類型)value:'標(biāo)題'// 屬性初始值(可選),如果未指定則會(huì)根據(jù)類型選擇一個(gè)},// 彈窗內(nèi)容content :{type:String,value:'彈窗內(nèi)容'},// 彈窗取消按鈕文字cancelText :{type:String,value:'取消'},// 彈窗確認(rèn)按鈕文字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? ? ? })? ? },/*

? ? * 內(nèi)部私有方法建議以下劃線開頭

? ? * triggerEvent 用于觸發(fā)事件

? ? */_cancelEvent(){//觸發(fā)取消回調(diào)this.triggerEvent("cancelEvent")? ? },? ? _confirmEvent(){//觸發(fā)成功回調(diào)this.triggerEvent("confirmEvent");? ? }? }})

step4

截至目前為止查乒,你應(yīng)該完成了一個(gè)自定義彈窗組件的大部分弥喉,可是你保存后并沒有發(fā)現(xiàn)任何變化,因?yàn)槲覀冞€需要在index.wxml文件中引入它玛迄!

首先需要在index.json中引入組件:

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

然后我們?cè)趇ndex.wxml中引入它由境,并增加我們自定義的一些值,如下

ClickMe!

嗯哪蓖议,還差最后一步虏杰,index.js配置,沒錯(cuò)勒虾,這個(gè)也很簡(jiǎn)單纺阔,我就復(fù)制粘貼了

//index.js//獲取應(yīng)用實(shí)例constapp = getApp()Page({/**

* 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成

*/onReady:function(){//獲得dialog組件this.dialog =this.selectComponent("#dialog");? },? showDialog(){this.dialog.showDialog();? },//取消事件_cancelEvent(){console.log('你點(diǎn)擊了取消');this.dialog.hideDialog();? },//確認(rèn)事件_confirmEvent(){console.log('你點(diǎn)擊了確定');this.dialog.hideDialog();? }})

到此!大功告成修然!

step5

讓我們測(cè)試一下試試看:

初始化

點(diǎn)擊按鈕之后呢笛钝,會(huì)出現(xiàn)如下效果:

彈窗出現(xiàn)

點(diǎn)擊取消或者確定按鈕的話,我們?cè)谑录性O(shè)置了彈窗會(huì)關(guān)閉低零,并會(huì)打印出相應(yīng)的信息婆翔,具體點(diǎn)擊完應(yīng)該怎么做,就看你們自己發(fā)揮了掏婶,我只能幫你到這里了~

點(diǎn)擊取消

點(diǎn)擊確定

總結(jié)

現(xiàn)在啃奴,你已經(jīng)基本掌握了小程序中的自定義組件開發(fā)技巧,怎么樣雄妥,是不是很棒最蕾,應(yīng)該給自己點(diǎn)個(gè)贊,打個(gè)call老厌。

總體來說瘟则,小程序推出自定義組件后,感覺方便了很多枝秤,還沒有 get 的小伙伴們醋拧,趕緊學(xué)習(xí)學(xué)習(xí),以后多用組件化開發(fā),就不會(huì)那么難受了丹壕,加油哦~

具體代碼庆械,我已經(jīng)托管到github上了,歡迎issue~

作者:Cryptic

鏈接:http://www.reibang.com/p/8a2a730d9e60

來源:簡(jiǎn)書

著作權(quán)歸作者所有菌赖。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)缭乘,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末琉用,一起剝皮案震驚了整個(gè)濱河市堕绩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌邑时,老刑警劉巖奴紧,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異晶丘,居然都是意外死亡绰寞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門铣口,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人觉壶,你說我怎么就攤上這事脑题。” “怎么了铜靶?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵叔遂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我争剿,道長(zhǎng)已艰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任蚕苇,我火速辦了婚禮哩掺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涩笤。我一直安慰自己嚼吞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布蹬碧。 她就那樣靜靜地躺著舱禽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恩沽。 梳的紋絲不亂的頭發(fā)上誊稚,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼里伯。 笑死城瞎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俏脊。 我是一名探鬼主播全谤,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼爷贫!你這毒婦竟也來了认然?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤漫萄,失蹤者是張志新(化名)和其女友劉穎卷员,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腾务,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毕骡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岩瘦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片未巫。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖启昧,靈堂內(nèi)的尸體忽然破棺而出叙凡,到底是詐尸還是另有隱情,我是刑警寧澤密末,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布握爷,位于F島的核電站,受9級(jí)特大地震影響严里,放射性物質(zhì)發(fā)生泄漏新啼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一刹碾、第九天 我趴在偏房一處隱蔽的房頂上張望燥撞。 院中可真熱鬧,春花似錦教硫、人聲如沸叨吮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茶鉴。三九已至,卻和暖如春景用,著一層夾襖步出監(jiān)牢的瞬間涵叮,已是汗流浹背惭蹂。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留割粮,地道東北人盾碗。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像舀瓢,于是被迫代替她去往敵國(guó)和親廷雅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 本套組件結(jié)合了微信的視覺規(guī)范京髓,為用戶提供更加統(tǒng)一的使用感受航缀。包含: 底部彈出視圖(Dialog)、支付密碼輸入框(...
    R_yan閱讀 2,010評(píng)論 0 9
  • 前言 微信小程序自1月19號(hào)發(fā)布后,可謂是有人歡喜有人憂啊.曾經(jīng)對(duì)它一度抱有各種期待的前端工作者們?cè)趶埧偟囊痪渚?...
    LinDaiDai_霖呆呆閱讀 6,195評(píng)論 6 11
  • 注意:目前自定義組件相關(guān)特性處于公測(cè)階段堰怨。如果需要使用相關(guān)特性芥玉,請(qǐng)確認(rèn)在項(xiàng)目選項(xiàng)中已勾選“預(yù)覽/上傳時(shí)使用新特性”...
    YU_YU_閱讀 3,137評(píng)論 0 5
  • 微信小程序不支持自定義組件,只提供了一個(gè)非常受限制的模板功能备图,尤其缺乏了開發(fā)產(chǎn)品中最重要的幾個(gè)功能: 模板內(nèi)的數(shù)據(jù)...
    Keith1314閱讀 7,389評(píng)論 0 3
  • 組件化是web灿巧、移動(dòng)開發(fā)的大趨勢(shì),一次開發(fā)多次使用揽涮,調(diào)用方便抠藕,解耦性好。當(dāng)然在小程序開發(fā)是一個(gè)趨勢(shì)蒋困。 官網(wǎng):htt...
    共田君閱讀 2,095評(píng)論 0 0