微信小程序學習(組成伤靠、組件、事件、渲染)

一宴合、小程序項目組成部分

1.1焕梅、小程序項目基礎組成部分
image.png
1.2、小程序代碼構成

小程序官方建議把所有小程序的頁面卦洽,都存放在 pages 目錄中贞言,以單獨的文件夾存在。


image.png
1.3阀蒂、app.json配置文件
image.png
1.4该窗、project.config.json配置文件
image.png

image.png
1.5、sitemap.json配置文件

微信現(xiàn)已開放小程序內搜索蚤霞,效果類似于PC網(wǎng)頁的 SEO酗失。sitemap.json 文件用來配置小程序頁面是否允許微信索引。
當開發(fā)者允許微信索引時昧绣,微信會通過爬蟲的形式规肴,為小程序的頁面內容建立索引。當用戶的搜索關鍵字和頁面的索引匹配成功的時候夜畴,小程序的頁面將可能展示在搜索結果中拖刃。
如果頁面不允許被微信索引,將action配置成disallow贪绘。


image.png

二兑牡、組件

小程序中的組件也是由宿主環(huán)境提供的,開發(fā)者可以基于組件快速搭建出漂亮的頁面結構税灌。官方把小程序的組件分為了9大類均函,分別是:
1、視圖容器
2垄琐、基礎內容
3边酒、因表單組件
4、導航組件
5狸窘、媒體組件
6墩朦、map 地圖組件
7、canvas 畫布組件
8翻擒、開放能力
9氓涣、無障礙訪問

2.1、view組件

view普通視圖區(qū)域陋气,類似于 HTML 中的 div劳吠,是一個塊級元素,常用來實現(xiàn)頁面的布局效果巩趁。

<view class = "container1">
    <view>A</view>
    <view>B</view>
    <view>C</view>
</view>
.container1 view{
  height: 100px;
  width:100px;
  text-align: center;
  line-height: 100px;
}

.container1  view:nth-child(1){
  background-color: pink;
}

.container1  view:nth-child(2){
  background-color:aqua;
}
.container1  view:nth-child(3){
  background-color:lightcoral;
}

.container1{
  display: flex;
  justify-content: space-around;
}
image.png
2.2痒玩、view組件實現(xiàn)縱向滾動效果
<scroll-view class = "container1" scroll-y>
    <view>A</view>
    <view>B</view>
    <view>C</view>
</scroll-view>
.container1 view{
    height: 100px;
    width:100px;
    text-align: center;
    line-height: 100px;
  }
  
  .container1  view:nth-child(1){
    background-color: pink;
  }
  
  .container1  view:nth-child(2){
    background-color:aqua;
  }
  .container1  view:nth-child(3){
    background-color:lightcoral;
  }
  
  .container1{
    height: 120px;
    width: 100px;
    border:1px solid red;
  }
image.png
2.3、swiper組件

swiper組件實現(xiàn)輪播圖

<swiper class="swiper-container" indicator-dots>
    <!--第一張輪播圖-->
    <swiper-item>
       <view class="item">A</view>
    </swiper-item>
    <!--第二張輪播圖-->
    <swiper-item>
      <view class="item">B</view>
    </swiper-item>
    <!--第三張輪播圖-->
    <swiper-item>
      <view class="item">C</view>
    </swiper-item>
</swiper>
.swiper-container{
    height: 150px;
  }
  
  .item{
    height: 100%;
    text-align: center;
    line-height: 150px;
  }
  
  swiper-item:nth-child(1) .item{
   background-color: lightcoral;
  }
  swiper-item:nth-child(2) .item{
    background-color: lightcyan;
   }
   swiper-item:nth-child(3) .item{
    background-color: lightpink;
   }
image.png
2.4、swiper組件常用屬性
image.png
2.5蠢古、text組件

文本組件奴曙,類似于 HTML 中的 span 標簽,是一個行內元素草讶。
通過 text 組件的 selectable 屬性洽糟,實現(xiàn)長按選中文本內容的效果:

<view>
<!--手機號支持長按選中操作-->
 <text selectable>1800000000000</text>
</view>

通過 rich-text 組件的 nodes 屬性節(jié)點,把 HTML 字符串渲染為對應的 UI 結構堕战。

<rich-text nodes="<h1 style='color:red;'>標題<h1>"></rich-text>
image.png
2.6坤溃、button組件

按鈕組件
功能比 HTML 中的 button 按鈕豐富
通過 open-type 屬性可以調用微信提供的各種功能(客服、轉發(fā)嘱丢、獲取用戶授權薪介、獲取用戶信息等)

<view>--------------通過type指定按鈕類型--------------</view>

<button>默認按鈕</button>
<button type = "primary">主色調按鈕</button>
<button type = "warn">警告按鈕</button>


<view>--------------通過size = "mini"小尺寸按鈕--------------</view>

<button size = "mini">默認按鈕</button>
<button type = "primary" size = "mini">主色調按鈕</button>
<button type = "warn" size = "mini">警告按鈕</button>

<view>--------------通過plain鏤空按鈕--------------</view>

<button size = "mini" plain>默認按鈕</button>
<button type = "primary" size = "mini" plain>主色調按鈕</button>
<button type = "warn" size = "mini" plain>警告按鈕</button>
image.png
2.7、image組件
<!--空圖片-->
<image></image>
<!--使用src指定圖片路徑-->
<image src = "/images/example.jpg"></image>
image {
    /*通過邊框線證明image有默認的高和寬*/
   border: 1px solid red;
}
image.png

image 組件的 mode 屬性屿讽。
image 組件的 mode 屬性用來指定圖片的裁剪和縮放模式昭灵,常用的 mode 屬性值如下:


image.png

image.png

三、模版與配置

3.1伐谈、數(shù)據(jù)綁定

在data中定義數(shù)據(jù)烂完,在wxml中使用Mustache 語法綁定數(shù)據(jù)。

3.1.1诵棵、綁定內容

在頁面對應的 .js 文件中抠蚣,把數(shù)據(jù)定義到 data 對象中即可。如下

/**
   * 頁面的初始數(shù)據(jù)
   */
  data: {
     //字符串類型數(shù)據(jù)
     info:"init data",
     //數(shù)組類型數(shù)據(jù)
     msg:[{msg:'HELLO'},{msg:'WORLD'}]
  },
image.png

把data中的數(shù)據(jù)綁定到頁面中渲染履澳,使用 Mustache 語法(雙大括號)將變量包起來即可嘶窄。語法格式如下:

<view>{{info}}</view>
image.png
3.1.2、綁定屬性
  /**
   * 頁面的初始數(shù)據(jù)
   */
  data: {
     //字符串類型數(shù)據(jù)
     info:"init data",
     //數(shù)組類型數(shù)據(jù)
     msg:[{msg:'HELLO'},{msg:'WORLD'}],
     //動態(tài)綁定屬性
     imgSrc:"/images/example.jpg",
  },
<!--Mustache 語法綁定屬性-->
<image src="{{imgSrc}}" mode="widthFix"/>
image.png
3.1.3距贷、運算(三元運算柄冲、算術運算等)
  data: {
     //字符串類型數(shù)據(jù)
     info:"init data",
     //數(shù)組類型數(shù)據(jù)
     msg:[{msg:'HELLO'},{msg:'WORLD'}],
     //動態(tài)綁定屬性
     imgSrc:"/images/example.jpg",
     //三元運算,生成10以后的隨機數(shù)
     randomNum:Math.random()*10,  
  },
<view>{{randomNum>=5?'隨機數(shù)大于等于5':'隨機數(shù)小于5'}}</view>
image.png
3.2忠蝗、事件綁定
3.2.1现横、小程序中的常用事件
image.png

事件對象的屬性列表蓬推,當事件回調觸發(fā)的時候刻剥,會收到一個事件對象event苍凛,它的詳細屬性如下表所示:


image.png
3.2.2胞此、target 和currentTarget 的區(qū)別

target 是觸發(fā)該事件的源頭組件,而 currentTarget 則是當前事件所綁定的組件胰苏。舉例如下:


image.png

點擊內部的按鈕時径缅,點擊事件以冒泡的方式向外擴散猪腕,也會觸發(fā)外層view 的tap 事件處理函數(shù)配阵。此時馏颂,對于外層的 view 來說:
e.target 指向的是觸發(fā)事件的源頭組件示血,因此,e.target 是內部的按鈕組件饱亮。
e.currentTarget 指向的是當前正在觸發(fā)事件的那個組件矾芙,因此舍沙,e.currentTarget 是當前的 view 組件近上。

3.2.3、bindtap 的語法格式

在小程序中拂铡,不存在 HTML 中的 onclick 鼠標點擊事件壹无,而是通過 tap 事件來響應用戶的觸摸行為。通過 bindtap感帅,可以為組件綁定 tap 觸摸事件斗锭,語法如下:

<button type="primary" bind:tap="btnTapHandler">觸摸事件按鈕</button>

在頁面的 .js 文件中定義對應的事件處理函數(shù),事件參數(shù)通過形參 event(一般簡寫成e)來接收:

   /**
    *事件綁定 
    */ 
   btnTapHandler(e){ // 按鈕的 tap 事件處理函數(shù)
       console.log(e)//事件參數(shù)對象 e
   },
image.png
3.2.4失球、在事件處理函數(shù)中為 data 中的數(shù)據(jù)賦值

通過調用 this.setData(data0bject)方法岖是,可以給頁面 data 中的數(shù)據(jù)重新賦值,示例如下:

Page({
   /**
    *事件綁定  更改data中count的值
    */ 
   changeCountHandler(){
       this.setData({
           count:this.data.count+1
       })
   },

  /**
   * 頁面的初始數(shù)據(jù)
   */
  data: {
    //定義初始數(shù)據(jù)
    count:0,
  },
<button type="primary" bind:tap="changeCountHandler">觸摸事件+1按鈕</button>
<view>count當前值為:{{count}}</view>
image.png
3.2.5实苞、事件傳參

小程序中的事件傳參比較特殊豺撑,不能在綁定事件的同時為事件處理函數(shù)傳遞參數(shù)。例如黔牵,下面的代碼將不能正常工作:

<button type="primary" bind:tap="changeCountHandler(123)">觸摸事件+1按鈕</button>
image.png

因為小程序會把 bindtap 的屬性值聪轿,統(tǒng)一當作事件名稱來處理,相當于要調用一個名稱為 changeCountHandler(123)的事件處理函數(shù)猾浦。

可以為組件提供 data-自定義屬性傳參陆错,其中代表的是參數(shù)的名字,示例代碼如下:

<button type="primary" bind:tap="changeCountHandler" data-info="{{2}}">觸摸事件按鈕</button>
<view>count當前值為:{{count}}</view>

最終:
info 會被解析為參數(shù)的名字金赦。
數(shù)值 2 會被解析為參數(shù)的值音瓷。

在事件處理函數(shù)中,通過 event.target.dataset.參數(shù)名 即可獲取到具體參數(shù)的值夹抗,示例代碼如下:

 /**
    *事件綁定  更改data中count的值
    */ 
   changeCountHandler(e){
       // dataset 是一個對象绳慎,包含了所有通過 data-* 傳遞過來的參數(shù)項
       console.log(e.target.dataset)
       // 通過 dataset 可以訪問到具體參數(shù)的值
       console.log(e.target.dataset.info)
       this.setData({
           count:this.data.count+e.target.dataset.info
       })
   },

  /**
   * 頁面的初始數(shù)據(jù)
   */
  data: {
    //定義初始數(shù)據(jù)
    count:0,
  },
image.png
6.2.6、bindinput 的語法格式

在小程序中兔朦,通過 input 事件來響應文本框的輸入事件偷线,語法格式如下:通過 bindinput,可以為文本框綁定輸入事件:

<input type="text" bindinput="inputHandler"/>
<view>當前輸入值為:{{inputValue}}</view>

input{
    border:1px solid #eee;
    margin: 5px;
    padding:5px;
    border-radius: 5px;
}
Page({
   /**
    *事件綁定  更改data中count的值
    */ 
   inputHandler(e){
       // e.detail.value 是變化過后沽甥,文本框最新的值
       console.log(e.detail.value)
       this.setData({
        inputValue:e.detail.value
       })
   },

  /**
   * 頁面的初始數(shù)據(jù)
   */
  data: {
    //定義初始數(shù)據(jù)
    inputValue:'',
  },
image.png

四声邦、條件渲染

4.1、wx:if

在小程序中摆舟,使用 wx:if="{{condition}}"來判斷是否需要渲染該代碼塊,也可以用 wx:elif 和 wx:else 來添加 else 判斷亥曹。如下:

 /**
   * 頁面的初始數(shù)據(jù)
   */
  data: {
    //定義初始數(shù)據(jù)
    type:0,
  },
<!--如果type值等于1邓了,頁面顯示數(shù)據(jù)為男-->
<view wx:if="{{type===1}}">男</view>

<!--如果type值等于2,頁面顯示數(shù)據(jù)為女-->
<view wx:elif="{{type===2}}">女</view>

<!--否則頁面顯示數(shù)據(jù)為保密-->
<view wx:else>保密</view>
image.png
4.2媳瞪、結合<block>標簽使用 wx:if

如果要一次性控制多個組件的展示與隱藏骗炉,可以使用一個<block></block>標簽將多個組件包裝起來,并在<block>標簽上使用 wx:if 控制屬性蛇受,示例如下:


<!--如果type值等于1句葵,頁面顯示數(shù)據(jù)為A-->
<block wx:if="{{type===1}}">
    <view>A</view>
    <view>A</view>
    <view>A</view>
</block>

<!--如果type值等于2,頁面顯示數(shù)據(jù)為B-->
<block wx:elif="{{type===2}}">
    <view>B</view>
    <view>B</view>
    <view>B</view>
</block>

<!--否則頁面顯示數(shù)據(jù)為C-->
<block wx:else>
    <view>C</view>
    <view>C</view>
    <view>C</view>
</block>
image.png
4.3兢仰、hidden

在小程序中乍丈,直接使用 hidden="{{condition}}" 也能控制元素的顯示與隱藏。如下:

<view hidden="{{type===1}}">如果type等于1隱藏把将,否則顯示轻专。</view>
image.png
4.4、wx:if與 hidden的對比

運行方式不同
wx:if 以動態(tài)創(chuàng)建和移除元素的方式察蹲,控制元素的展示與隱藏请垛。
hidden 以切換樣式的方式(display: none/block;),控制元素的顯示與隱藏洽议。
使用建議
頻繁切換時宗收,建議使用 hidden。
控制條件復雜時绞铃,建議使用 wx:if 搭配 wx:elif镜雨、wx:else 進行展示與隱藏的切換。

五儿捧、列表渲染
5.1荚坞、wx:for

通過 wx:for 可以根據(jù)指定的數(shù)組,循環(huán)渲染重復的組件結構菲盾,語法示例如下:

  /**
   * 頁面的初始數(shù)據(jù)
   */
  data: {
    //定義初始數(shù)組數(shù)據(jù)
    array:['REACT','VUE','ANGULAR']
  },
<view wx:for="{{array}}">
  索引是:{{index}},當前項是:{{item}}
</view>

默認情況下颓影,當前循環(huán)項的索引用 index 表示;當前循環(huán)項用 item 表示。


image.png
5.2懒鉴、手動指定索引和當前項的變量名*

使用 wx:for-index 可以指定當前循環(huán)項的索引的變量名使用 wx:for-item 可以指定當前項的變量名诡挂。如下:

<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">
  索引是:{{idx}},當前項是:{{itemName}}
</view>
5.3、wx:key 的使用

類似于 Vue 列表渲染中的 :key临谱,小程序在實現(xiàn)列表渲染時璃俗,也建議為渲染出來的列表項指定唯一的 key 值從而提高渲染的效率,示例代碼如下:

/**
   * 頁面的初始數(shù)據(jù)
   */
  data: {
    //定義初始數(shù)組數(shù)據(jù)
    listValue:[
    {id:1,name:'REACT'},
    {id:2,name:"VUE"},
    {id:3,name:"ANGULAR"}
]
  },
<view wx:for="{{listValue}}" wx:key="id">
  {{item.name}}
</view>
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末悉默,一起剝皮案震驚了整個濱河市城豁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抄课,老刑警劉巖唱星,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雳旅,死亡現(xiàn)場離奇詭異,居然都是意外死亡间聊,警方通過查閱死者的電腦和手機攒盈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哎榴,“玉大人型豁,你說我怎么就攤上這事√净埃” “怎么了偷遗?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驼壶。 經(jīng)常有香客問我,道長喉酌,這世上最難降的妖魔是什么热凹? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮泪电,結果婚禮上般妙,老公的妹妹穿的比我還像新娘。我一直安慰自己相速,他們只是感情好碟渺,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著突诬,像睡著了一般苫拍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旺隙,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天绒极,我揣著相機與錄音,去河邊找鬼蔬捷。 笑死垄提,一個胖子當著我的面吹牛,可吹牛的內容都是我干的周拐。 我是一名探鬼主播铡俐,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妥粟!你這毒婦竟也來了审丘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤罕容,失蹤者是張志新(化名)和其女友劉穎备恤,沒想到半個月后稿饰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡露泊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年喉镰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惭笑。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡侣姆,死狀恐怖,靈堂內的尸體忽然破棺而出沉噩,到底是詐尸還是另有隱情捺宗,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布川蒙,位于F島的核電站蚜厉,受9級特大地震影響,放射性物質發(fā)生泄漏畜眨。R本人自食惡果不足惜昼牛,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望康聂。 院中可真熱鬧贰健,春花似錦、人聲如沸恬汁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氓侧。三九已至脊另,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甘苍,已是汗流浹背尝蠕。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留载庭,地道東北人看彼。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像囚聚,于是被迫代替她去往敵國和親靖榕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內容