微信小程序自定義組件和通信的方法
1、基本知識(shí)
開(kāi)發(fā)中常見(jiàn)的組件主要分為 公共組件 和 頁(yè)面組件 兩種,因此注冊(cè)組件的方式也分為兩種:
- 全局注冊(cè):在
app.json文件中配置usingComponents節(jié)點(diǎn)進(jìn)行引用聲明,注冊(cè)后可在任意組件使用 - 局部注冊(cè):在
頁(yè)面.json文件中配置usingComponents節(jié)點(diǎn)進(jìn)行引用聲明,只可在當(dāng)前頁(yè)面使用
在組件的 .js 中,需要調(diào)用 Component 方法創(chuàng)建自定義組件,Component 中有以下兩個(gè)屬性:
data數(shù)據(jù):組件的內(nèi)部數(shù)據(jù)methods方法:在組件中事件處理程序需要寫(xiě)到methods中才可以其他……
2、Properties屬性
屬性 Properties 是指組件的對(duì)外屬性,主要用來(lái)接收組件使用者傳遞給組件內(nèi)部的數(shù)據(jù),和 data 一同用于組件的模板渲染
Component({
properties: {
// 如果需要接收傳遞的屬性,有兩種方式:全寫(xiě)、簡(jiǎn)寫(xiě)
label: String // 簡(jiǎn)寫(xiě)
label: {
// type 組件使用者傳遞的數(shù)據(jù)類(lèi)型
// 數(shù)據(jù)類(lèi)型:String、Number、Boolean、Object、Array
// 也可以設(shè)置為 null,表示不限制類(lèi)型
type: String,
value: ''
},
// 文字顯示位置
position: {
type: String,
value: 'right'
}
}
})3、slot插槽
在使用基礎(chǔ)組件時(shí),可以給組件傳遞子節(jié)點(diǎn)傳遞內(nèi)容,從而將內(nèi)容展示到頁(yè)面中,自定義組件也可以接收子節(jié)點(diǎn)內(nèi)容
只不過(guò)在組件模板中需要定義 <slot /> 節(jié)點(diǎn),用于承載組件引用時(shí)提供的子節(jié)點(diǎn)
默認(rèn)情況下,一個(gè)組件的 wxml 中只能有一個(gè) slot 。需要使用多 slot 時(shí),可以在組件 js 中聲明啟用。
同時(shí)需要給 slot 添加 name 來(lái)區(qū)分不同的 slot,給子節(jié)點(diǎn)內(nèi)容添加 slot 屬性來(lái)將節(jié)點(diǎn)插入到 對(duì)應(yīng)的 slot 中
Component({
options: {
// 啟用多 slot 支持
multipleSlots: true
}
})<!-- 子組件 --> <view> <slot name="slot-top" /> <!-- slot 就是用來(lái)接收、承載子節(jié)點(diǎn)內(nèi)容 --> <!-- slot 只是一個(gè)占位符,子節(jié)點(diǎn)內(nèi)容會(huì)將 slot 進(jìn)行替換 --> <!-- 默認(rèn)插槽 --> <view><slot /></view> <slot name="slot-bottom" /> </view>
<custom01> <text slot="slot-top">我需要顯示到頂部</text> <!-- 默認(rèn)情況下,自定義組件的子節(jié)點(diǎn)內(nèi)容不會(huì)進(jìn)行展示 --> <!-- 如果想內(nèi)容進(jìn)行展示,需要再組件模板中定義 slot 節(jié)點(diǎn) --> 我是子節(jié)點(diǎn)內(nèi)容 <text slot="slot-bottom">我需要顯示到低部</text> </custom01>
4、組件樣式隔離
默認(rèn)情況下,自定義組件的樣式只受到自定義組件 wxss 的影響。除非以下兩種情況:
app.wxss或頁(yè)面. wxss中使用了標(biāo)簽名(view)選擇器(或一些其他特殊選擇器)來(lái)直接指定樣式,這些選擇器會(huì)影響到頁(yè)面和全部組件。通常情況下這是不推薦的做法。- 指定特殊的樣式隔離選項(xiàng)
styleIsolation,支持以下取值: isolated表示啟用樣式隔離,在自定義組件內(nèi)外,使用 class 指定的樣式將不會(huì)相互影響(一般情況下的默認(rèn)值);apply-shared表示頁(yè)面 wxss 樣式將影響到自定義組件,但自定義組件 wxss 中指定的樣式不會(huì)影響頁(yè)面;shared表示頁(yè)面 wxss 樣式將影響到自定義組件,自定義組件 wxss 中指定的樣式也會(huì)影響頁(yè)面和其他設(shè)置了 apply-shared 或 shared 的自定義組件。
Component({
options: {
styleIsolation: 'isolated'
}
})5、組件間通信
- 父往子傳值:
Properties - 子往父?jìng)髦担鹤远x事件、獲取組件實(shí)例
5.1 自定義事件
- 自定義組件觸發(fā)事件時(shí),需要使用
triggerEvent方法發(fā)射一個(gè)自定義的事件 - 自定義組件標(biāo)簽上通過(guò)
bind方法監(jiān)聽(tīng)發(fā)射的事件
子組件觸發(fā)事件:
<!-- 在子組件中 --> <button type="primary" plain bindtap="sendData">傳遞數(shù)據(jù)</button>
// 在子組件中
Component({
// 組件的初始數(shù)據(jù)
data: {
num: 666
},
// 組件的方法列表
methods: {
// 將數(shù)據(jù)傳遞給父組件
sendData () {
// 如果需要將數(shù)據(jù)傳遞給父組件
// 需要使用 triggerEvent 發(fā)射自定義事件
// 第二個(gè)參數(shù),是攜帶的參數(shù)
this.triggerEvent('myevent', this.data.num)
}
}
})父頁(yè)面(組件)監(jiān)聽(tīng)事件:
<!-- 在父頁(yè)面(組件)中 -->
<view>{{ num }}</view>
<!-- 需要在自定義組件標(biāo)簽上通過(guò) bind 方法綁定自定義事件,同時(shí)綁定事件處理函數(shù) -->
<custom05 bind:myevent="getData" />// 在父頁(yè)面(組件)中
Page({
data: {
num: ''
},
getData (event) {
// 可以通過(guò)事件對(duì)象.detail 獲取子組件傳遞給父組件的數(shù)據(jù)
// console.log(event)
this.setData({
num: event.detail
})
}
})5.2 獲取組件實(shí)例
可在父組件里調(diào)用 this.selectComponent() ,獲取子組件的實(shí)例對(duì)象,就可以直接拿到子組件的任意數(shù)據(jù)和方法。
調(diào)用時(shí)需要傳入一個(gè)匹配選擇器 selector,如:this.selectComponent(".my-component")。
到此這篇關(guān)于微信小程序自定義組件和通信的文章就介紹到這了,更多相關(guān)微信小程序組件和通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序自定義可滑動(dòng)頂部TabBar選項(xiàng)卡實(shí)現(xiàn)頁(yè)面切換功能示例
這篇文章主要介紹了微信小程序自定義可滑動(dòng)頂部TabBar選項(xiàng)卡實(shí)現(xiàn)頁(yè)面切換功能,結(jié)合實(shí)例形式分析了微信小程序自定義頂部TabBar選項(xiàng)卡頁(yè)面切換功能的相關(guān)布局、樣式及功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-05-05
Echarts地圖添加引導(dǎo)線效果(labelLine)
這篇文章主要介紹了Echarts地圖添加引導(dǎo)線效果(labelLine),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Js使用WScript.Shell對(duì)象執(zhí)行.bat文件和cmd命令
這篇文章主要介紹了Js使用WScript.Shell對(duì)象執(zhí)行.bat文件和cmd命令,需要的朋友可以參考下2014-12-12
JavaScript中利用Array filter() 方法壓縮稀疏數(shù)組
Array filter() 方法會(huì)跳過(guò)稀疏數(shù)組中缺少的元素,它的返回?cái)?shù)組總是稠密的。這篇文章給大家介紹了JavaScript中利用Array filter() 方法壓縮稀疏數(shù)組的相關(guān)知識(shí),需要的朋友參考下2018-02-02
解決layui中的form表單與button的點(diǎn)擊事件沖突問(wèn)題
今天小編就為大家分享一篇解決layui中的form表單與button的點(diǎn)擊事件沖突問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
firefox中用javascript實(shí)現(xiàn)鼠標(biāo)位置的定位
firefox中用javascript實(shí)現(xiàn)鼠標(biāo)位置的定位...2007-06-06
一個(gè)XML格式數(shù)據(jù)轉(zhuǎn)換為圖表的例子
這個(gè)例子使用的是轉(zhuǎn)換為VML的語(yǔ)法,換成其他如SVG的語(yǔ)法,就可以轉(zhuǎn)換成為SVG圖形,單元數(shù)量可以任意加。2010-02-02
Promise.all中對(duì)于reject的處理方法
這篇文章主要介紹了Promise.all中對(duì)于reject的處理方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08

