微信小程序——模板,組件與自定義組件

模板

  • 可以在模板中定義代碼片段椭蹄,然后在不同的地方調(diào)用闻牡。
  • 通過name指定模板名字,然后通過is調(diào)用模板绳矩,通過data傳入模板所需值
  • 模板擁有自己的作用域罩润,只能使用 data 傳入的數(shù)據(jù)以及模版定義文件中定義的 <wxs /> 模塊。
Page({
  data: {
    temData: {
      index: 0,
      msg: 'this is a template',
      time: '2016-09-15'
    }
  }
})
<template name="odd">
  <view> odd </view>
</template>
<template name="even">
  <view> even </view>
</template>

<block wx:for="{{[1, 2, 3, 4, 5]}}">
    <template is="{{item % 2 == 0 ? 'even' : 'odd'}}" data="{{...temData}}"/>
</block>

引用模板

import

可以在該文件中使用目標(biāo)文件定義的template

<!-- item.wxml -->
<template name="item">
  <text>{{text}}</text>
</template>
<import src="item.wxml"/>
<template is="item" data="{{text: 'forbar'}}"/>
include

可以將目標(biāo)文件除了 <template/> <wxs/> 外全部引入到 include 位置

<!-- index.wxml -->
<include src="header.wxml"/>
<view> body </view>
<!-- header.wxml -->
<view> header </view>

WXS模塊

WXS(WeiXin Script)是小程序的一套腳本語言翼馆,結(jié)合 WXML構(gòu)建出頁面的結(jié)構(gòu)割以。

  1. wxs 不依賴于基礎(chǔ)庫版本金度,可以在所有版本的小程序中運行。
  2. wxs 與 javascript 是不同的語言拳球,有自己的語法审姓。
  3. wxs 的運行環(huán)境和其他 javascript 代碼是隔離的,wxs 中不能調(diào)用其他 javascript 文件中定義的函數(shù)祝峻,也不能調(diào)用小程序提供的API魔吐。
  4. wxs 函數(shù)不能作為組件的事件回調(diào)。
  5. 在 iOS 上 wxs 會比 javascript 代碼快 2 ~ 20 倍莱找。android 設(shè)備上無差異酬姆。

組件

視圖容器
  • view 視圖容器
    可設(shè)置點擊時動態(tài)改變class
  • scroll-view 可滾動視圖區(qū)域
    可設(shè)置橫/豎向滾動,以及各種滾動事件奥溺,和onPullDownRefresh沖突
  • swiper 滑塊視圖容器
  • movable-view 可移動的視圖容器辞色,在頁面中可以拖拽滑動
  • cover-view/cover-image 覆蓋在原生組件之上的視圖
    • cover-view 可覆蓋的原生組件包括map、video浮定、canvas相满、camera、live-player桦卒、live-pusher立美,只支持嵌套cover-view、cover-image方灾,可在cover-view中使用button建蹄。
基礎(chǔ)內(nèi)容
  • icon 微信自帶圖標(biāo)
  • text 文本
    可以被長按選中,可顯示連續(xù)空格裕偿,可解碼&nbsp;&lt;等
  • rich-text 用數(shù)組渲染的富文本
  • progress 進度條
表單組件
  • button 按鈕
    符合微信樣式洞慎,可提交表單及調(diào)用專屬開放能力,有點擊時動態(tài)樣式
  • checkbox 多項選擇器
  • form 表單
    可設(shè)置submit和reset事件嘿棘,以及formId用于發(fā)送模板消息
    表單內(nèi)組件需要name以進行submit
  • label
  • picker 從底部彈起的滾動選擇器
    包括普通選擇器劲腿,多列選擇器,時間選擇器鸟妙,日期選擇器焦人,省市區(qū)選擇器
  • picker-view 嵌入頁面的滾動選擇器
  • radio 單選項目
  • slider 滑動選擇器
  • switch 開關(guān)選擇器
  • textarea 多行輸入框
導(dǎo)航
  • navigator 頁面鏈接
  • functional-page-navigator 僅在插件的自定義組件中有效,用于跳轉(zhuǎn)到插件功能頁
多媒體
  • image 支持懶加載
  • video
  • camera
  • map
  • canvas
開放能力
  • open-data 展示用戶信息
  • web-view 占據(jù)整個頁面的web容器圆仔,無法在個人類型小程序使用

自定義組件

1. 組件的創(chuàng)建和使用

在組件json中配置為組件

{
  "component": true
}

在使用處配置標(biāo)簽名和組件位置

{
  "usingComponents": {
    "my-component": "component/myComponent"
  }
}
  • 標(biāo)簽名只能是小寫字母垃瞧、中劃線和下劃線的組合
  • 自定義組件也可以引用自定義組件
2. 組件的模板
  • 通過slot節(jié)點可以將頁面中的內(nèi)容嵌入組件,多個slot時需要在組件js中聲明
<!-- 組件模板 -->
<view class="wrapper">
  <view>這里是組件的內(nèi)部節(jié)點</view>
  <slot></slot>
</view>

<!-- 引用組件的頁面模版 -->
<view>
  <component-tag-name>
    <view>這里是插入到組件slot中的內(nèi)容</view>
  </component-tag-name>
</view>
  • 通過屬性傳值 此時組件可通過properties獲取propA屬性值
  <component-tag-name prop-a="{{dataFieldA}}"></component-tag-name>
3.組件的樣式
  1. 組件只受自身wxss樣式影響蔫劣,app.wxss和組件所在頁面樣式只有font坪郭,color等繼承樣式會影響組件,可以在 Component 中用 externalClasses 定義準許引入的外部樣式類
  2. 組件和引用組件的頁面無法使用id脉幢,屬性歪沃,標(biāo)簽名選擇器嗦锐,應(yīng)使用class選擇器
  3. 后代選擇器偶爾會有非預(yù)期表現(xiàn)
4.組件的生命周期
  • created 組件實例化,但節(jié)點樹還未導(dǎo)入沪曙,因此這時不能用setData
  • attached 節(jié)點樹完成奕污,可以用setData渲染節(jié)點,但無法操作節(jié)點
  • ready 組件布局完成液走,這時可以用SelectorQuery獲取節(jié)點信息碳默,也可以操作節(jié)點
  • moved 組件實例被移動到樹的另一個位置時觸發(fā)
  • detached 組件實例從節(jié)點樹中移除時觸發(fā)
5.組件的屬性
  • properties 對外屬性,可設(shè)置類型缘眶,初始值和變化時的相應(yīng)函數(shù)
  • data 內(nèi)部數(shù)據(jù)
    注:properties字段和data字段相互間不能沖突(盡管它們位于不同的定義段中)
  • methods
  • relations 組件間關(guān)系
  • externalClasses 外部樣式類
  • options

組件通信

  • WXML 數(shù)據(jù)綁定:用于父組件向子組件的指定屬性設(shè)置數(shù)據(jù)嘱根。
  • 事件:用于子組件向父組件傳遞數(shù)據(jù)。
  • 如果以上兩種方式不足以滿足需要巷懈,父組件還可以通過 this.selectComponent 方法獲取子組件實例對象该抒,直接訪問組件的任意數(shù)據(jù)和方法。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顶燕,一起剝皮案震驚了整個濱河市凑保,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涌攻,老刑警劉巖欧引,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異癣漆,居然都是意外死亡维咸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門惠爽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來癌蓖,“玉大人,你說我怎么就攤上這事婚肆∽飧保” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵较性,是天一觀的道長用僧。 經(jīng)常有香客問我,道長赞咙,這世上最難降的妖魔是什么责循? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮攀操,結(jié)果婚禮上院仿,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好歹垫,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布剥汤。 她就那樣靜靜地躺著,像睡著了一般排惨。 火紅的嫁衣襯著肌膚如雪吭敢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天暮芭,我揣著相機與錄音鹿驼,去河邊找鬼。 笑死辕宏,一個胖子當(dāng)著我的面吹牛蠢沿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匾效,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼舷蟀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了面哼?” 一聲冷哼從身側(cè)響起野宜,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎魔策,沒想到半個月后匈子,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡闯袒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年虎敦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片政敢。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡其徙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喷户,到底是詐尸還是另有隱情唾那,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布褪尝,位于F島的核電站闹获,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏河哑。R本人自食惡果不足惜避诽,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望璃谨。 院中可真熱鬧沙庐,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽容达。三九已至古涧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間花盐,已是汗流浹背羡滑。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留算芯,地道東北人柒昏。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像熙揍,于是被迫代替她去往敵國和親职祷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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