Day10-微信小程式實戰-交友小程式-自定義callPhone 和copyText元件
---為了方便使用者可以撥打電話和複製微訊號(下面就要實現這樣的兩個功能)
注意:在小程式中是沒辦法直接的新增使用者的微信的,所以就只能是複製微訊號
(這種東西的話可以直接去做,也可以做成元件,做出元件的好處就是可以在其他地方也可以用的)
下面也演示瞭如何建立一個元件
在components下面,新建一個callPhone目錄,然後在這個目錄下面新建一個callPhone的component檔案
然後如果要在detail詳情頁面中使用的話,就可以點開detail.json配置檔案
"usingComponents": {
"call-phone" : "/components/callPhone/callPhone"}
元件的名字就是key ,value就是元件的絕對地址
配置好了之後,就可以直接在wxml中 通過 <call-phone />來引入了
然後就要對元件進行樣式的設定啦
如果是撥打電話的話,就直接用一個圖示來表示即可了
會發現:我們在detail.json裡面引入了這個元件了,然後在callPhone元件中也設定了樣式
<text class="iconfont icondadianhua"></text>
但是在detail頁面中並沒有顯示出來
因為iconfont是定義在外面的,其實也是全域性的,如果要在元件裡面引用的話,還要進行額外的設定才行的,檢視微信開發檔案
https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html
Component({
options: {
styleIsolation: 'isolated'
}
})
styleIsolation
選項從基礎庫版本2.6.5開始支援。它支援以下取值:
isolated
表示啟用樣式隔離,在自定義元件內外,使用 class 指定的樣式將不會相互影響(一般情況下的預設值);apply-shared
表示頁面 wxss 樣式將影響到自定義元件,但自定義元件 wxss 中指定的樣式不會影響頁面;shared
表示頁面 wxss 樣式將影響到自定義元件,自定義元件 wxss 中指定的樣式也會影響頁面和其他設定了apply-shared
或shared
的自定義元件。(這個選項在外掛中不可用。)
其中:apply-shared就是我們想要的了(選擇它之後,咱們就可以把外部的樣式傳入進來了)
之後就是要進行父子通訊了,要把電話號碼傳入到這個元件內部去,可以寫一個自定義屬性來實現
<call-phone phoneNumber="{{ detail.phoneNumber }}" />
通過這個就可以,使得不同的使用者可以傳不同的電話號碼給這個元件了
然後把電話號碼傳過去之後
在元件中的properties 是用來接受傳過來的引數的,然後還要指定資料的型別
再把呼叫的方法寫到methods裡面
對元件中的wxml 新增一個點選事件 handleCallPhone 方法,然後在methond裡面定義即可了
之後就要看微信提高給我們撥打電話的介面API了
在開放檔案裡面
https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html
wx.makePhoneCall({
phoneNumber: '1340000' //僅為示例,並非真實的電話號碼
})
methods: {
handleCallPhone(){
wx.makePhoneCall({
phoneNumber: this.data.phoneNumber
})
}
}
以上就是對 撥打電話 這個元件的設計了
下面,就是複製微訊號元件的設計了
同理的和 打電話一樣設定,元件 然後到detail.json檔案裡面把元件引入,在detail.wxml中使用,記得自定義一個屬性把微訊號傳到元件中去
然後在元件的js檔案中properties定義傳過來的引數的資料型別,設定樣式共享,然後在元件的wxml中設定我們在iconfont中的複製圖示,即可看到如下效果了
然後就是給元件的wxml加一個點選事件,再到js檔案裡面定義這個方法即可了
這個方法就是微信提供的 剪貼簿
handleCopyText(){
wx.setClipboardData({
data:this.data.copyText,
success(res){
wx.getClipboardData({
success(res){
wx.showToast({
title: '複製成功',
})
}
})
}
});
}