主頁 > 前端設計 > 黑馬微信小程式入門

黑馬微信小程式入門

2021-12-28 08:18:43 前端設計

文章目錄

  • 1.環境準備
    • 1.1. 注冊賬號
    • 1.2 獲取APPID
    • 1.3 下載開發工具
  • 2第一個微信小程式
    • 2.1. 打開微信開發者?具
    • 2.2. 新建?程式項?
    • 2.3 填寫專案資訊
  • 3.小程式的目錄結構
    • 3.1. ?程式?件結構和傳統web對?
    • 3.2. 基本的項??錄
  • 4.?程式配置?件
    • 4.1. 全域配置app.json
    • 4.2 tabbar
    • 4.3 頁面配置
  • 5.模板語法
    • 5.1資料系結
    • 5.2 基本運算
    • 5.3 串列渲染
      • 5.3.1 串列
      • 5.3.2 block標簽
    • 7.4 條件渲染
    • 7.5 簡易的雙向系結
    • 7.6 事件的系結
  • 8.樣式WXSS
    • 8.1. 尺?單位
    • 8.2 樣式匯入
    • 8.3. 選擇器
  • 9.常見組件
    • 9.1 text
    • 9.2. image
    • 9.3 swiger
    • 9.4 navigator
    • 9.10 button按鈕
    • 9.11 icon圖示
    • 9.12 radio單選
    • 9.13 check多選
  • 10.自定義組件
    • 10.1 創建組件快速入門
    • 10.2組件-?定義組件傳參
    • 10.2組件的其他屬性
  • 11.小程式的生命周期
    • 11.1 應用生命周期(App.js)
    • 11.2 頁面生命周期

1.環境準備

1.1. 注冊賬號

建議使用全新的郵箱,沒有注冊過其他小程式或者公眾號的,地址為:https://mp.weixin.qq.com/wxamp/thirdtools/extend?token=461217894&lang=zh_CN

1.2 獲取APPID

由于后期調?微信?程式的接?等功能,需要索取開發者的?程式中的 APPID ,所以在注冊成功后, 可登錄,然后獲取APPID, 登錄,成功后可看到如下界? 然后復制你的APPID,悄悄的保存起來,不要給別?看到
點擊開發管理,選擇開發設定下面的appid
在這里插入圖片描述

1.3 下載開發工具

選擇開發工具下面的開發中工具

2第一個微信小程式

2.1. 打開微信開發者?具

注意 第?次登錄的時候 需要掃碼登錄
在這里插入圖片描述

2.2. 新建?程式項?

點擊小程式選擇添加
在這里插入圖片描述

2.3 填寫專案資訊

在這里插入圖片描述

3.小程式的目錄結構

?程式框架的?標是通過盡可能簡單、?效的?式讓開發者可以在微信中開發具有原?的APP體驗的服 務,
?程式框架提供了??的視圖層描述語? WXML 和 WXSS ,以及 JavaScript ,并在視圖層與邏 輯層間提供了資料傳輸和事件系統,讓開發者能夠專注于資料與邏輯,

3.1. ?程式?件結構和傳統web對?

結構傳統web微信?程式
結構HTMLWXML
樣式CSSWXSS
邏輯JavascriptJavascript
配置?JSON

通過以上對?得出,傳統web 是三層結構,?微信?程式 是四層結構,多了?層 配置.json

3.2. 基本的項??錄

在這里插入圖片描述

4.?程式配置?件

?個?程式應?程式會包括最基本的兩種配置?件,?種是全域的 app.json 和 ????的page.json

4.1. 全域配置app.json

app.json 是當前?程式的全域配置,包括了?程式的所有??路徑、界?表現、?絡超時時間、底 部 tab 等,普通快速啟動項??邊的 app.json 配置
在這里插入圖片描述

欄位的含義

  1. pages 欄位??于描述當前?程式所有??路徑,這是為了讓微信客?端知道當前你的?程式 ??定義在哪個?錄,
  2. window 欄位?定義?程式所有??的頂部背景顏?,?字顏?定義等,
屬性型別默認值描述最低版本
navigationBarBackgroundColorHexColor#000000導航欄背景顏色,如 #000000
navigationBarTextStylestringwhite導航欄標題顏色,僅支持 black / white
navigationBarTitleTextstring導航欄標題文字內容
navigationStylestringdefault導航欄樣式,僅支持以下值:default 默認樣式custom 自定義導航欄,只保留右上角膠囊按鈕,iOS/Android 微信客戶端 7.0.0,Windows 微信客戶端不支持
backgroundColorHexColor#ffffff視窗的背景色
backgroundTextStylestringdark下拉 loading 的樣式,僅支持 dark / light
backgroundColorTopstring#ffffff頂部視窗的背景色,僅 iOS 支持微信客戶端 6.5.16
backgroundColorBottomstring#ffffff底部視窗的背景色,僅 iOS 支持
enablePullDownRefreshbooleanfalse是否開啟當前頁面下拉重繪,詳見 Page.onPullDownRefresh
onReachBottomDistancenumber50頁面上拉觸底事件觸發時距頁面底部距離,單位為px,詳見 Page.onReachBottom
pageOrientationstringportrait螢屏旋轉設定,支持 auto / portrait / landscape詳見 回應顯示區域變化2.4.0 (auto) / 2.5.0 (landscape)
disableScrollbooleanfalse設定為 true 則頁面整體不能上下滾動,只在頁面配置中有效,無法在 app.json 中設定
usingComponentsObject頁面自定義組件配置1.6.3
initialRenderingCachestring頁面初始渲染快取配置,支持 static / dynamic2.11.1
stylestringdefault啟用新版的組件樣式2.10.2
singlePageObject單頁模式相關配置2.12.0
restartStrategystringhomePage重新啟動策略配置2.8.0

4.2 tabbar

如果小程式是一個多 tab 應用(客戶端視窗的底部或頂部有 tab 欄可以切換頁面),可以通過 tabBar 配置項指定 tab 欄的表現,以及 tab 切換時顯示的對應頁面,
在這里插入圖片描述
配置項

屬性型別必填默認值描述最低版本
colorHexColortab 上的文字默認顏色,僅支持十六進制顏色
selectedColorHexColortab 上的文字選中時的顏色,僅支持十六進制顏色
backgroundColorHexColortab 的背景色,僅支持十六進制顏色
borderStylestringblacktabbar 上邊框的顏色, 僅支持 black / white
listArraytab 的串列,詳見 list 屬性說明,最少 2 個、最多 5 個 tab
positionstringbottomtabBar 的位置,僅支持 bottom / top
custombooleanfalse自定義 tabBar,見詳情2.5.0

其中 list 接受一個陣列,只能配置最少 2 個、最多 5 個 tab,tab 按陣列的順序排序,每個項都是一個物件,其屬性值如下:

屬性型別必填說明
pagePathstring頁面路徑,必須在 pages 中先定義
textstringtab 上按鈕文字
iconPathstring圖片路徑,icon 大小限制為 40kb,建議尺寸為 81px * 81px,不支持網路圖片,當 position 為 top 時,不顯示 icon,
selectedIconPathstring選中時的圖片路徑,icon 大小限制為 40kb,建議尺寸為 81px * 81px,不支持網路圖片,當 position 為 top 時,不顯示 icon,
{
  "pages": [
    "pages/index/index",
    "pages/img/img",
    "pages/my/my",
    "pages/search/search",
    "pages/logs/logs",
    "pages/one/one"
  ],
  "window": {
    "backgroundTextStyle": "dark",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "Weixin",
    "navigationBarTextStyle": "black",
    "enablePullDownRefresh":true
      },
      "tabBar": {
        "color": "#0094ff",
        "selectedColor":"#009400",
        "list": [
          {
            "pagePath": "pages/index/index",
            "text": "首頁",
            "iconPath": "icon/_home.png",
            "selectedIconPath": "icon/home.png"
          },
          {
            "pagePath": "pages/img/img",
            "text": "圖片",
            "iconPath": "icon/_img.png",
            "selectedIconPath": "icon/img.png"
          },
          {
            "pagePath": "pages/my/my",
            "text": "我的",
            "iconPath": "icon/_my.png",
            "selectedIconPath": "icon/my.png"
          },
          {
            "pagePath": "pages/search/search",
            "text": "搜索",
            "iconPath": "icon/_search.png",
            "selectedIconPath": "icon/search.png"
          }
        ]
      },
  "style": "v2",
  "sitemapLocation": "sitemap.json",
  "lazyCodeLoading": "requiredComponents"
}

4.3 頁面配置

每一個小程式頁面也可以使用 .json 檔案來對本頁面的視窗表現進行配置,頁面中配置項在當前頁面會覆寫 app.json 的 window 中相同的配置項,檔案內容為一個 JSON 物件,有以下屬性:

配置項

屬性型別默認值描述最低版本
navigationBarBackgroundColorHexColor#000000導航欄背景顏色,如 #000000
navigationBarTextStylestringwhite導航欄標題顏色,僅支持 black / white
navigationBarTitleTextstring導航欄標題文字內容
navigationStylestringdefault導航欄樣式,僅支持以下值default 默認樣式custom 自定義導航欄,只保留右上角膠囊按鈕,iOS/Android 微信客戶端 7.0.0,Windows 微信客戶端不支持
backgroundColorHexColor#ffffff視窗的背景色
backgroundTextStylestringdark下拉 loading 的樣式,僅支持 dark / light
backgroundColorTopstring#ffffff頂部視窗的背景色,僅 iOS 支持微信客戶端 6.5.16
backgroundColorBottomstring#ffffff底部視窗的背景色,僅 iOS 支持微信客戶端 6.5.16
enablePullDownRefreshbooleanfalse是否開啟當前頁面下拉重繪,
onReachBottomDistancenumber50頁面上拉觸底事件觸發時距頁面底部距離,單位為px,
pageOrientationstringportrait螢屏旋轉設定,支持 auto / portrait / landscape詳見 回應顯示區域變化2.4.0 (auto) / 2.5.0 (landscape)
disableScrollbooleanfalse設定為 true 則頁面整體不能上下滾動,只在頁面配置中有效,無法在 app.json 中設定
usingComponentsObject頁面自定義組件配置1.6.3
initialRenderingCachestring頁面初始渲染快取配置,支持 static /dynamic2.11.1
stylestringdefault啟用新版的組件樣式2.10.2
singlePageObject單頁模式相關配置2.12.0
restartStrategystringhomePage重新啟動策略配置2.8.0

5.模板語法

text標簽和view標簽

  1. text相當于web中的span標簽 行內元素 不會換行
  2. view 相當于web中的div元素 塊級元素 會換行
<!--
    1. text相當于web中的span標簽 行內元素 不會換行
    2.view 相當于web中的div元素 塊級元素 會換行
-->
<text>1</text>
<text>2</text>
<view>1</view>
<view>2</view>

5.1資料系結

  1. 普通寫法
    js中
  data:{
    msg:"hollow word",
    num:100,
    ju:true,
    per:{
      name:"smile",
      age:18
    },
    checked:true
  },

wxml中

<!-- 字串型別 -->
<view>
    {{msg}}
</view>
<!-- 數字型別 -->
<view>
    {{num}}
</view>
<!-- 布爾型別 -->
<view>
    使用好用{{ju}}
</view>
<!-- 物件型別 -->
  <view>
      {{per.name}}--{{per.age}}
  </view>

<view wx:if="{{ju}}"></view>
<view wx:else="{{ju}}"></view>
     <!-- 使用bool型別充當屬性check 字串和花括號之間不要存在空格,否則會導致識別識別  -->
<checkbox checked="{ju}">
    
</checkbox>
  

5.2 基本運算

  <!-- 算術運算 -->
<view>{{num+1+1}}</view>
<!-- 三元運算 -->
 <view>
     {{num>100?'num大于100':'num小于100'}}
 </view>
 <!-- 判斷運算子 -->
 <view wx:if="ju==true">
     判斷為真
</view>
<view wx:else='ju==false'>
    判斷為假
</view>   
    

5.3 串列渲染

5.3.1 串列

  1. wx:for="{{回圈的陣列或物件}}" wx:for-item="{{回圈項的名稱}}" wx:for-index="{{回圈的索引}}"
  2. wx:key=“唯一值” 用來提高串列渲染的性能
    wx:key 系結一個普通字串的時候 最好為陣列物件中的唯一屬性
    wx:key="*this" 就表示陣列為一個普通的陣列 *this表示的是回圈項
  3. 當出現嵌套回圈的時候一定要注意 系結的名稱不要重名
  4. 默認情況下 小程式回圈項的名稱和索引的名稱分別為 item、index
  student:[
      {
        name:'a',
        age:18
      },
      {
        name:'b',
        age:19
      },
      {
        name:'c',
        age:20
      }
    ]
 <view>
     <view wx:for="{{student}}" wx:for-item="item" wx:for-index="index" wx:key="*this">
         {{index}}--{{item.name}}--{{item.age}}
     </view>
 </view>
   

5.3.2 block標簽

  1. 占位符標簽
  2. 寫代碼的時候可以看到這個標簽存在
  3. 頁面渲染的時候,小程式可以把他們移除掉

7.4 條件渲染

  • wx:if="{{true/false}}"
    if else else if 對應微信小程式分別為 wx:if wx:else wx:elif
  • hidden
    在標簽上直接加屬性hidden hidden="{{true}}"
  • 什么場景下使用哪一個
  1. 當標簽不是頻繁的切換顯示 優先使用wx:if 直接把標簽從頁面結構給移除掉

  2. 當表示頻繁的切換顯示 優先使用hiddem 通過添加樣式的方式來切換顯示

7.5 簡易的雙向系結

input輸入的資料在頁面上顯示出來
wxml

<input model:value="{{num}}" />

js

  data: {
    num:0}

7.6 事件的系結

?程式中系結事件,通過bind關鍵字來實作,如 bindtap bindinput bindchange 等 不同的組件?持不同的事件,具體看組件的說明即可,
具體舉例:通過按鈕的加和減實作數字的加減同時可以在輸入框內輸入
wxml

<input type="text" bindinput="bindInput"/>
<button bindtap="add" data-operation="{{n}}">+</button>
<button bindtap="del" data-operation="{{n}}">-</button>
<view >
   {{num}}
</view>

js

Page({

  /**
   * 頁面的初始資料
   */
  data: {
    num:0
  },
  //輸入框的input執行邏輯
  bindInput(e){
    console.log(e.detail.value)
    this.setData({
      num:e.detail.value
    }
    )
  },
  add(e)
  {
    console.log(e)
    console.log(e.target.dataset.operation)
    this.setData({
      num:this.data.num+e.target.dataset.operation.id  
    })
  },
  del(e)
  {
    console.log(e)
    console.log(e.target.dataset.operation)
    this.setData({
      num:this.data.num-e.target.dataset.operation.id
    })
  }
})

8.樣式WXSS

WXSS( WeiXin Style Sheets )是?套樣式語?,?于描述 WXML 的組件樣式, 與 CSS 相?,
WXSS 擴展的特性有:

  • 回應式?度單位 rpx
  • 樣式導?

8.1. 尺?單位

rpx (responsive pixel): 可以根據螢屏寬度進??適應,規定螢屏寬為 750rpx ,如在iPhone6 上,螢屏寬度為 375px ,共有750個物理像素,則 750rpx = 375px = 750物理像素 , 1rpx = 0.5px = 1物理像素 1rpx = 0.5px = 1物理像素 ,

設備rpx換算px (螢屏寬度/750)px換算rpx (750/螢屏寬度)
iPhone51rpx = 0.42px1px = 2.34rpx
iPhone61rpx = 0.5px1px = 2rpx
iPhone6 Plus1rpx = 0.552px1px = 1.81rpx

建議: 開發微信?程式時設計師可以? iPhone6 作為視覺稿的標準,
使?步驟:

  1. 確定設計稿寬度 pageWidth
  2. 計算?例 750rpx = pageWidth px ,因此 1px=750rpx/pageWidth,
  3. 在less?件中,只要把設計稿中的 px => 750/pageWidth rpx 即可

8.2 樣式匯入

使? @import 陳述句可以導?外聯樣式表,只?持相對路徑,
示例
common.wxss

view{
    color: aqua;
    font-size: 10px;
}

在demo.wxss中匯入common.wxss

/* pages/demo/demo.wxss */
/*
通過@Import 引入 用的是相對路徑
*/
@import "../../style/common.wxss"   

8.3. 選擇器

特別需要注意的是 ?程式 不?持通配符 * 因此以下代碼?效!

選擇器樣例樣例描述
.class.intro選擇所有擁有class=“intro” 的組件
#id#firstname選擇擁有id=firstname的組件
elementview選擇所有 view 組件
element, elementview,checkbox選擇所有?檔的 view 組件和所有的 checkbox 組件
nth-child(n)view:nth-child(n)選擇某個索引的標簽
::afterview::after在 view 組件后邊插?內容
::beforeview::before在 view 組件前邊插?內容

9.常見組件

9.1 text

  1. ?本標簽
  2. 只能嵌套text
  3. ?按?字可以復制(只有該標簽有這個功能)
  4. 可以對空格 回? 進?編碼
屬性型別默認值必填說明
selectablebooleanfalse文本是否可選
user-selectbooleanfalse文本是否可選,該屬性會使文本節點顯示為 inline-block
decodebooleanfalse是否解碼
<text  selectable decode>
    111&nbsp;222
</text>

9.2. image

  1. 圖?標簽,image組件默認寬度320px、?度240px
  2. ?持懶加載
屬性名型別默認值說明
srcString圖?資源地址
modeStringscaleToFill圖?裁剪、縮放的模式
lazy-loadBooleanfalse圖?懶加載

mode 有效值: mode 有 13 種模式,其中 4 種是縮放模式,9種是裁剪模式,
在這里插入圖片描述
示例

<image src="/icon/home.png" mode="top"></image>

9.3 swiger

微信小程式內置的輪播圖組件,其中默認的with為100%,height為150px

屬性名型別默認值說明
indicator-dotsBooleanfalse是否顯??板指?點
indicator-colorColorrgba(0, 0, 0, .3)指?點顏?
indicator-active-colorColor#000000當前選中的指?點顏?
autoplayBooleanfalse是否?動切換
intervalNumber5000?動切換時間間隔
circularBooleanfalses是否回圈輪播
currentnumber0當前所在滑塊的 index
durationnumber500滑動影片時長
circularbooleanfalse是否采用銜接滑動
verticalbooleanfalse滑動方向是否為縱向

還有其他屬性看官方檔案
案例演示
wxml


<!--
    1. 輪播圖外部容器swagger
    2. 每一個輪播項 swagger-item 
    3. swagger 標簽存在默認樣式
      with 100% height 150px 
      image 存在默認寬度和高度 320*240
      swiper無法實作內容撐開
    4. 找出原圖的寬和高  等比例給原圖定寬高
    原圖寬度和高度為200*200
    swiper 寬度/swiper高度 = 原圖的寬度 /原圖的高度
    swiper的高度= swiper的寬度 *原圖的高度/原圖的寬度

    height=100wx*200/200



-->
<swiper autoplay interval="1000" 	circular 	indicator-dots 			bindtransition >
  <swiper-item > <image mode="widthFix"  src="/icon/home.png" > </image> </swiper-item>
  <swiper-item > <image mode="widthFix"  src="/icon/my.png" > </image> </swiper-item>
  <swiper-item > <image  mode="widthFix" src="/icon/search.png" > </image> </swiper-item>  
</swiper>

wxss

swiper{
    /* width: 100%;
    height: calc(100wx*200/200); */
    width: 100%;
    height: calc(720rpx*200/200)
}

image{
    width: 100%;
}

9.4 navigator

導航組件 類似超鏈接標簽

屬性名型別默認值說明
targetStringself在哪個?標上發?跳轉,默認當前?程式,可選值 self/miniProgram
urlString當前?程式內的跳轉鏈接
open- typeStringnavigate跳轉?式

open-type 有效值:

說明
navigate保留當前??,跳轉到應?內的某個??,但是不能跳到tabbar ??
redirect關閉當前??,跳轉到應?內的某個??,但是不允許跳轉到tabbar ??,
switchTab跳轉到 tabBar ??,并關閉其他所有? tabBar ??
reLaunch關閉所有??,打開到應?內的某個?? navigateBack 關閉當前??,回傳上???或多級??,可通過 getCurrentPages() 獲取當 前的??堆疊,決定需要回傳?層
exit退出?程式,target="miniProgram"時生效

9.10 button按鈕

屬性型別默認值必填說明
sizestringdefault按鈕的??
typestringdefault按鈕的樣式型別
plainbooleanfalse按鈕是否鏤空,背景?透明
disabledbooleanfalse是否禁?
loadingbooleanfalse名稱前是否帶 loading 圖示
form- typestring?于 組件,點擊分別會觸發 組件的 submit/reset 事件
open- typestring微信開放能?

size的合法值

說明
default默認??
mini?尺?

type的合法值

說明
primary綠?
default??
warn紅?

form-type 的合法值

說明
submit提交表單
reset重置表單

open-type 的合法值

說明
contact打開客服會話,如果??在會話中點擊訊息卡?后回傳?程式,可以從bindcontact 回呼中獲得具體資訊
share觸發??轉發,使?前建議先閱讀使?指引
getPhoneNumber獲取???機號,可以從bindgetphonenumber回呼中獲取到??資訊
getUserInfo獲取??資訊,可以從bindgetuserinfo回呼中獲取到??資訊 launchApp 打開APP,可以通過app-parameter屬性設定向APP傳的引數
penSetting打開授權設定?
feedback打開“意?反饋”??,??可提交反饋內容并上傳?志,開發者可以登 錄?程式管理后臺后進?左側選單“客服反饋”??獲取到反饋內容

具體案例
wxml

<button size="default" > 默認大小</button>
<button size="mini">小尺寸</button>
<button type="primary">綠色</button>
<button type="default" disabled>白色</button>
<button type="warn" >紅色</button>
<button type="warn" plain>plain 紅色</button>
<button loading type="primary">加載中</button>
<button plain type="warn">鏤空</button>

<!--
    button開發
    open-type
    contact:直接打開客服對話功能 需要的微信小程式后臺配置
    share 轉發當前的小程式要微信朋友中 不能大小程式分享到朋友圈
    getPhoneNumber 獲取當前用戶的手機號碼資訊 結合一個事件來使用  不是企業的小程式賬號 沒有權限獲取用戶的手機號碼
        使用方式:1.系結一個事件 bindgetphonenumber 
        2.在事件的回呼函式中通過引數來獲取資訊 
        3.獲取到的用戶資訊是加密過的 需要自己搭建后臺服務器,在后臺服務器中決議電話號碼 回傳到小程式中就可以看到訊息了
    getUserInfo  獲取當前用戶的個人資訊
        1. 使用方法類似于獲取用戶的個人資訊
        2.可以直接獲取 不存在加密欄位 
    launchApp 在小程式中直接打開app
        1.需要在APP中通過APP的某個鏈接打開小程式
        2.在小程式中通過這個功能直接打開app
        舉例 京東app和京東小程式 
    openSetting 打開小程式內置的授權頁面
      授權頁面中只會出現用戶曾經點擊過的頁面
    feedback 打開小程式內置的意見反饋頁面   只能通過真機除錯的功能打開         
-->
<button open-type="contact">contact</button>
<button open-type="share">share</button>
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" >getPhoneNumber</button>
<button open-type="getUserInfo" bindgetuserinfo="getUserInfo">getUserInfo</button>
<button open-type="launchApp">launchApp</button>
<button open-type="openSetting">openSetting</button>
<button open-type="feedback">feedback</button>

js

Page({
  //獲取用戶的手機號碼
  getPhoneNumber(e)
  {
    console.log(e)
  },
  //獲取用戶的資訊
  getUserInfo(e)
  {
    console.log(e)
  }
})

9.11 icon圖示

屬性型別默認值必填說明
typestringicon的型別,有效值:success, success_no_circle, info, warn, waiting, cancel, download, search, clear
sizenumber/string23icon的大小
colorstringicon的顏色,同css的color

樣例

<icon type="success" size="23" color=""> </icon>
<icon type="info" size="13" color="green"> </icon>
<icon type="warn" size="40" color="red"> </icon>
<icon type="cancel" size="23" color="yellow"> </icon>
<icon type="download" size="23" color="pink"> </icon>
<icon type="clear" size="23" color=""> </icon>

9.12 radio單選

屬性型別默認值必填說明
valuestringradio 標識,當該radio 選中時,radio-group 的 change 事件會攜帶radio的value
checkedbooleanfalse當前是否選中
disabledbooleanfalse是否禁用
colorstring#09BB07radio的顏色,同css的color

9.13 check多選

屬性和單選radio大概一致
應用舉例
wxml

<radio-group bindchange="change">
<radio value="" color="red"></radio>
<radio value="" color="red"></radio>    
</radio-group>
您的性別是:{{gen}}
  

<checkbox-group bindchange="change1">
    <checkbox wx:for="{{list}}" wx:item="item" wx:key="id" value="{{item.name}}">
        {{item.name}}
    </checkbox>
      
</checkbox-group>
  
您選擇的水果是{{che}}

js檔案

// pages/icon/icon.js
Page({

  /**
   * 頁面的初始資料
   */
  data: {
    gen:'',
    list:[
      {
        id:0,
        name:"蘋果",
        value:"蘋果"
      },
      {
        id:1,
        name:"香蕉",
        value:"香蕉"
      },
      {
        id:2,
        name:"梨",
        value:"梨"
      }
    ],
    che:''

  },
  change(e)
  {
    console.log(e)
    this.setData({
      gen:e.detail.value
    })
  },
  change1(e)
  {
    console.log(e)
    this.setData({
      che:e.detail.value
    }
    )
  }
})

10.自定義組件

?程式允許我們使??定義組件的?式來構建??,

10.1 創建組件快速入門

創建組件的三個步驟:

  1. 創建組件
  2. 什么組件
  3. 在頁面中使用自定義組件
    1,創建組件
    類似于頁面,一個自定義組件由 json wxml wxss js 4個檔案組成
    可以在微信開發者?具中快速創建組件的?件結構,在創建組件的目錄先選擇創建component
    在這里插入圖片描述
    創建好的目錄結構
    在這里插入圖片描述
    2.宣告組件
    ?先需要在組件的 json ?件中進??定義組件宣告
    在Tabs.json檔案中
    在這里插入圖片描述
    標簽檔案中的內容,在tabs.wxml中
    在這里插入圖片描述

在要使用的組件中宣告組件
假設我在demo1檔案中使用Tabs組件,在demo1.json中宣告使用的組件
在demo1.js宣告使用的組件

{
  "usingComponents": {
    "Tabs":"../../component/Tabs/Tabs"
  }
}

在這里插入圖片描述
在demo1.wxml使用組件

<Tabs></Tabs>

結果展示
在這里插入圖片描述

10.2組件-?定義組件傳參

  1. ?組件通過屬性的?式給?組件傳遞引數
  2. ?組件通過事件的?式向?組件傳遞引數
    實體演示
    tabs.js
// component/Tabs/Tabs.js
Component({
  /**
   * 組件的屬性串列
   * 
   * 從父組件中接收的資料
   */
  properties: {
    //要接收的資料名稱
    Tabs:{
      // type 要接收資料的型別
      type:Array,
      // value 默認值
      value:''
    }
  },

  /**
   * 組件的初始資料
   */
  data: {
     
  },

  /**
   * 組件的方法串列
   */
  /**
   * 頁面.js檔案中 存放事件的回呼函式的時候 存放在data的統計目錄下
   * 組件.js檔案中 存放事件的回呼函式的時候 必須要存放在methods中
   */
  methods: {
    bindItemTip(e){
      /**
       * 1. 系結回呼事件 需要在methods中系結
       * 2.獲取被點擊的索引
       * 3.獲取原陣列
       * 4.對陣列回圈
       *    每一個回圈屬性改為false
       *    給當前所以添加激活選中效果
       * 
       * 5.點擊觸發事件的時候
       *   觸發父組件中的自定義事件 同時傳遞資料給父組件
       *    this.triggerEvent{"父組件自定義組件的名稱","要傳遞的引數"}
       */

        //獲取索引
        const {index}=e.currentTarget.dataset;

        this.triggerEvent("itemChange",{index});

        //5.點擊觸發事件的時候 觸發父組件中的自定義事件 同時傳遞資料給父組件
        // this.triggerEvent("itemchange",index);
        // data中的原陣列
        // let {Tabs}=this.data; //相當于 let tabs=this.data.tabs        
        //回圈陣列
        // for(let i=0;i<this.data.Tabs.length;i++)
        // {
        //   if(i===index)
        //   {
        //     this.data.Tabs[i].isActive=true
        //   }
        //   else{
        //     this.data.Tabs[i].isActive=false
        //   }
        // }
        // this.setData({
        //   Tabs
        // })
    }
  }
})

tabs.wxss

.tabs{}
.tabs_title{
    display: flex;
    padding: 10rpx 0;
}
.title_item{
    flex: 1;
    display: flex;
    justify-content: center;
    align-items: center;
}
.active{
    color: red;
    border-bottom: 5rpx solid currentColor;
}
.tabs_cotent{

}

tabs.wxml

<view class="tabs">
    <view class="tabs_title">
        <!-- <view class="title_item active">首頁</view>
        <view class="title_item">原創</view>
        <view class="title_item">分類</view>
        <view class="title_item">關于</view>   -->

    <view wx:for="{{Tabs}}" class="title_item {{item.isActive?'active':' '}}" 
    wx:key="id" 
    bindtap="bindItemTip"
    data-index="{{index}}"
    >
        {{item.name}}
    </view>
</view>      
    <view class="tabs_cotent">
        <!-- 內容 -->
        <!--
            slot 標簽 其實就是一個占位符 插槽
            等到父組件呼叫子組件的時候,在傳遞標簽,最終通過標簽傳遞過來,這些標簽會替代搜了他插槽的位置
        -->
        <slot></slot>
    </view>
        
</view>
  

demo1.js

// pages/demo1/demo1.js
Page({

  /**
   * 頁面的初始資料
   */
  data: {
    Tabs:[
      {
        id:0,
        name:"首頁",
        isActive:true
      },
      {
        id:1,
        name:"原創",
        isActive:false
      },
      {
        id:2,
        name:"分類",
        isActive:false
      },
      {
        id:3,
        name:"關于",
        isActive:false
      }
    ]
 
  },
  //自定義事件 用來接收組件傳遞過來的資料
  bindItemChange(e){
      console.log(e.detail)
      const {index}=e.detail
      console.log(index)
       let {Tabs}=this.data; //相當于 let tabs=this.data.tabs        
        // 回圈陣列
        for(let i=0;i<this.data.Tabs.length;i++)
        {
          if(i===index)
          {
            this.data.Tabs[i].isActive=true
          }
          else{
            this.data.Tabs[i].isActive=false
          }
        }
        this.setData({
          Tabs
        })
  },


  /**
   * 生命周期函式--監聽頁面加載
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函式--監聽頁面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函式--監聽頁面顯示
   */
  onShow: function () {

  },

  /**
   * 生命周期函式--監聽頁面隱藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函式--監聽頁面卸載
   */
  onUnload: function () {

  },

  /**
   * 頁面相關事件處理函式--監聽用戶下拉動作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 頁面上拉觸底事件的處理函式
   */
  onReachBottom: function () {

  },

  /**
   * 用戶點擊右上角分享
   */
  onShareAppMessage: function () {

  }
})

demo1.wxml

<!--
    1. 父組件(頁面)向子組件傳遞資料 通過標簽屬性的方式進行
        1. 在子組件上進行接收
        2.把這個資料當成data中的資料直接用即可
    2.子向父傳遞物件 通過事件的方式
        在子組件的標簽上加一個自定義事件    
-->
<Tabs Tabs="{{Tabs}}" binditemChange="bindItemChange">
    <!--
        solt標簽 其實就是一個占位符 插槽
        等到父組件呼叫子組件的時候 在傳遞標簽過來 最終這些被傳遞過來標簽 會替代solt插槽的位置
    -->
 <block wx:if="{{Tabs[0].isActive}}">1</block>
 <block wx:if="{{Tabs[1].isActive}}">2</block>
 <block wx:if="{{Tabs[2].isActive}}">3</block>
 <block wx:if="{{Tabs[3].isActive}}">4</block>
 
</Tabs>

效果圖
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

10.2組件的其他屬性

Component 構造器可?于定義組件,調? Component 構造器時可以指定組件的屬性、資料、?法 等

定義段型別是否必填描述
propertiesObject Map組件的對外屬性,是屬性名到屬性設定的映射表
dataObject組件的內部資料,和 properties ?同?于組件的模板渲 染
methodsObject組件的?法,包括事件回應函式和任意的?定義?法,關于 事件回應函式的使?
createdFunction組件?命周期函式,在組件實體剛剛被創建時執?,注意此 時不能調? setData
attachedFunction組件?命周期函式,在組件實體進???節點樹時執?
readyFunction組件?命周期函式,在組件布局完成后執?
movedFunction組件?命周期函式,在組件實體被移動到節點樹另?個位置 時執?
detachedFunction組件?命周期函式,在組件實體被從??節點樹移除時執?

11.小程式的生命周期

小程式的生命周期分為應用生命周期和頁面生命周期

11.1 應用生命周期(App.js)

屬性型別必填說明
onLaunchfunction監聽?程式初始化, 應用第一次啟動時就會觸發事件,一般用于獲取用戶的個人資訊
onShowfunction監聽?程式啟動或切前臺, 應用被用戶看見時觸發,對應用的資料或頁面效果重置
onHidefunction監聽?程式切后臺, 應用被隱藏時觸發,暫停或清除定時器
onErrorfunction錯誤監聽函式, 應用發生錯誤時會被觸發,在應用發生代碼報錯的時候,收集用戶的錯誤資訊,通過異步請求,將錯誤資訊發送給后臺
onPageNotFoundfunction??不存在監聽函式,應用第一次啟動的時候,找不到第一個入口頁面才會觸發(如果頁面不存在,可以通過js的方式重新跳轉頁面,跳轉到第二個頁面去)

11.2 頁面生命周期

屬性型別說明
dataObject??的初始資料
onLoadfunction監聽??加載 ,onLoad發送異步請求來初始化頁面資料
onShowfunction監聽??顯?
onReadyfunction監聽??初次渲染完成
onHidefunction監聽??隱藏
onUnloadfunction監聽??卸載(關閉當前頁面即可觸發)
onPullDownRefreshfunction監聽??下拉動作
onReachBottomfunction??上拉觸底事件的處理函式,上拉加載下一頁
onShareAppMessagefunction??點擊右上?轉發
onPageScrollfunction??滾動觸發事件的處理函式
onResizefunction??尺?改變時觸發
onTabItemTapfunction當前是 tab ?時,點擊 自己tab item時觸發

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/395150.html

標籤:其他

上一篇:蕪湖,這是一棵會唱歌的圣誕樹

下一篇:輕量級資料格式 —— JSON

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more