詳解微信小程序自定義組件的實(shí)現(xiàn)及數(shù)據(jù)交互
簡(jiǎn)單的自定義組件
本文的使用場(chǎng)景是:多個(gè)頁(yè)面都需要用到撥打電話(huà)功能,為減少代碼量、便于維護(hù),所以自定義了一個(gè)組件,每個(gè)頁(yè)面直接調(diào)用即可?;緦?shí)現(xiàn)下圖樣式:
下面我們來(lái)一步步的實(shí)現(xiàn)它:
step1:創(chuàng)建文件夾以及文件
首先創(chuàng)建一個(gè)components(名字可自?。┪募A,用于放置所有自定義的組件,
里面可以用右鍵自動(dòng)創(chuàng)建的方式,新建一個(gè)Component組件,例如:
創(chuàng)建之后的目錄結(jié)構(gòu)為:
其中callphone是我們本次要實(shí)現(xiàn)的撥打電話(huà)組件。
step2:組件的基本搭建
在callphone.wxml中:添加組件結(jié)構(gòu):
<view class="call" bindtap="callPhone"> <view class="phone">{{phone}}</view> <view>了解最新信息,免費(fèi)咨詢(xún)</view> <view class="callIcon"></view> </view>
在callphone.wxss中:添加組件樣式:
.call { display: block; padding: 18rpx 30rpx; width: 100%; color: #999; font-size: 24rpx; box-sizing: border-box; background: #ecf9e8; position: relative; border-radius: 10rpx; } .call .phone { color: #333; font-size: 40rpx; } .call .callIcon { width: 77rpx; height: 77rpx; position: absolute; top: 50%; margin-top: -38rpx; right: 30rpx; background-size: cover; background-image: url(data:image/png;base64,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); }
在callphone.js中:添加組件邏輯:
Component({ /** * 組件的屬性列表 */ properties: { }, /** * 組件的初始數(shù)據(jù) */ data: { phone: '400-010-9797' }, /** * 組件的方法列表 */ methods: { callPhone() { wx.makePhoneCall({ phoneNumber: this.data.phone }) } } })
step3:使用組件
我們要在index.wxml中使用該組件的話(huà),要在index.json中進(jìn)行聲明:(其中call-phone是組件的名稱(chēng),可以自取)
{ "usingComponents": { "call-phone": "/components/CallPhone/callphone" } }
在index.wxml中引用組件:
<call-phone></call-phone>
完成以上幾個(gè)步驟,一個(gè)簡(jiǎn)單的小程序自定義組件就完成了,運(yùn)行結(jié)果如下:
Page與Component數(shù)據(jù)交互
上面的例子中可以看到,電話(huà)號(hào)碼是在組件中的data中設(shè)置的,也就是每個(gè)頁(yè)面都是固定寫(xiě)死的;但是如果要實(shí)現(xiàn)每個(gè)界面的號(hào)碼不一樣的話(huà),此時(shí)就涉及到page往組件傳值的問(wèn)題,可以這么修改:
1、page > component
方法1:page在引用組件時(shí)能通過(guò)屬性值設(shè)置,callphone.js在properties獲取:
<!--index.wxml--> <call-phone phone="400-010-9797"></call-phone> // components/CallPhone/callphone.js Component({ properties: { phone: String //簡(jiǎn)寫(xiě) /* phone: { type: String, //類(lèi)型,目前接受的類(lèi)型包括:String, Number, Boolean, Object, Array, null(表示任意類(lèi)型) value: '', //初始值 observer: function(newVal, oldVal) {} } */ }, attached: function() { console.log("this.properties.phone:" + this.properties.phone); //控制臺(tái)打印:"400-010-9797" }, //... })
方法2:page在引用組件時(shí)通data-xxx設(shè)置,callphone.js在this.dataset獲取:
<!--index.wxml--> <call-phone data-tel="400-010-9797" ></call-phone> // components/CallPhone/callphone.js Component({ attached: function() { console.log("this.dataset.tel:" + this.dataset.tel); //控制臺(tái)打印:"400-010-9797" // 設(shè)置properties值用setData() this.setData({ phone: this.dataset.tel }); }, //... })
2、component > page
組件中的變量要傳到page頁(yè)面,可以通過(guò)事件觸發(fā)this.triggerEvent()來(lái)實(shí)行:
// components/CallPhone/callphone.js Component({ methods: { callPhone() { var myEventDetail = { msg: '來(lái)自component的信息', tel: '400-010-9797' } // detail對(duì)象,提供給事件監(jiān)聽(tīng)函數(shù) var myEventOption = {} // 觸發(fā)事件的選項(xiàng) this.triggerEvent('myevent', myEventDetail, myEventOption) } } }) <!--index.wxml--> <!--"bindmyevent"屬性與上面"myevent"對(duì)應(yīng),當(dāng)自定義組件觸發(fā)"myevent"事件時(shí),調(diào)用"call"方法 --> <call-phone bindmyevent="call"></call-phone> //index.js Page({ call: function(e) { console.log(e.detail.msg);//控制臺(tái)打印:"來(lái)自component的信息" wx.makePhoneCall({ phoneNumber: e.detail.tel }) } })
總結(jié)
以上所述是小編給大家介紹的微信小程序自定義組件的實(shí)現(xiàn)及數(shù)據(jù)交互,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- 微信小程序自定義組件實(shí)現(xiàn)多選功能
- 微信小程序自定義組件與頁(yè)面的相互傳參
- 一步步教你實(shí)現(xiàn)微信小程序自定義組件
- 微信小程序?qū)崿F(xiàn)頁(yè)面監(jiān)聽(tīng)自定義組件的觸發(fā)事件
- 微信小程序自定義組件components(代碼詳解)
- 微信小程序頁(yè)面調(diào)用自定義組件內(nèi)的事件詳解
- 微信小程序自定義組件實(shí)現(xiàn)環(huán)形進(jìn)度條
- 微信小程序自定義組件傳值 頁(yè)面和組件相互傳數(shù)據(jù)操作示例
- 微信小程序自定義組件的實(shí)現(xiàn)方法及自定義組件與頁(yè)面間的數(shù)據(jù)傳遞問(wèn)題
- 微信小程序自定義組件封裝及父子間組件傳值的方法
- 微信小程序的自定義組件的實(shí)現(xiàn)方法
相關(guān)文章
jq.ajax+php+mysql實(shí)現(xiàn)關(guān)鍵字模糊查詢(xún)(示例講解)
下面小編就為大家分享一篇jq.ajax+php+mysql實(shí)現(xiàn)關(guān)鍵字模糊查詢(xún)(示例講解),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01使用JS實(shí)現(xiàn)動(dòng)態(tài)時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了使用JS實(shí)現(xiàn)動(dòng)態(tài)時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03JavaScrip實(shí)現(xiàn)PHP print_r的數(shù)功能(三種方法)
PHP print_r的函數(shù)很好用,可以用來(lái)打印數(shù)組、對(duì)象等的結(jié)構(gòu)與數(shù)據(jù),可惜JavaScript并沒(méi)有原生提供類(lèi)似的函數(shù)。不過(guò)我們可以試著自己來(lái)實(shí)現(xiàn)這個(gè)函數(shù),下面提供一些方法與思路2013-11-11極力推薦一款小巧玲瓏的可視化編輯器bootstrap-wysiwyg
這篇文章主要為大家極力推薦一款小巧玲瓏的可視化編輯器bootstrap-wysiwyg,是一款基于jquery和bootstrap的可視化編輯器,感興趣的小伙伴們可以參考一下2016-05-05js select實(shí)現(xiàn)省市區(qū)聯(lián)動(dòng)選擇
這篇文章主要為大家詳細(xì)介紹了js select實(shí)現(xiàn)省市區(qū)聯(lián)動(dòng)選擇效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08優(yōu)化網(wǎng)頁(yè)之快速的呈現(xiàn)我們的網(wǎng)頁(yè)
優(yōu)化網(wǎng)頁(yè)之快速的呈現(xiàn)我們的網(wǎng)頁(yè)...2007-06-06JS實(shí)現(xiàn)圖片橫向滾動(dòng)效果示例代碼
圖片橫向滾動(dòng)效果,大家可能都已經(jīng)很熟悉了,本文為大家介紹下使用js實(shí)現(xiàn)橫向滾動(dòng)效果,喜歡的朋友可以參考下,希望對(duì)大家有所幫助2013-09-09JS關(guān)閉子窗口并且刷新上一個(gè)窗口的實(shí)現(xiàn)示例
這篇文章主要介紹了JS關(guān)閉子窗口并且刷新上一個(gè)窗口的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03只有 20 行的 JavaScript 模板引擎實(shí)例詳解
這篇文章主要介紹了只有 20 行的 JavaScript 模板引擎,結(jié)合實(shí)例形式分析了JavaScript 模板引擎實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-05-05