国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

小程序自定義組件的完成(案例解析)

小程序自定義組件的完成(案例解析)

更新時間:2025-09-20 文章作者:未知 信息來源:網絡 閱讀次數:

微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。

本篇文章給大家帶來的內容是關于小程序自定義組件的實現(案例解析),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

本文將結合案例,來闡述自定義組件實現。
先來上圖
20180914222027790.png

這個是一個購物車的數量組件。主要思路:
1、可以手動的輸入具體的數量
2、可自定義設置最小值、和最大值。當是最小值時,“-”號置灰,并不可點擊。當是最大值時,“+”號置灰,并不可點擊。
3、當手動輸入“0”開頭的數字時,自行過濾,禁止輸入,只值輸入非0數字。
4、當手動輸入數字大于最大值時,輸入框失去焦點,默認將輸入值置為最大值。或者當手動輸入數字小于最小值時,輸入框失去焦點,默認將輸入值置為最小值
5、如果屬性值minNum最小值、或者maxNum最大值設置為NaN,則表示最小值和最大值的大小沒有輸入的限制
6、默認最小值和最大值是沒有限制的,可以隨便輸入

一、使用自定義組件的方式

1、js文件中:

輸入框數值變化最終響應的函數
  showNumber: function (e) {
    var num = e.detail.num
  },

2、json文件中:

{  "usingComponents": {    
/**
    *  key:自定義組件的別名,在使用組件時用到。相當于Android自定義控件在xml文件中的申明的命名空間
    *  value: 自定義組件的全路徑
    */
    "component-option-num": "/component/optionNumber-component/optionNumber-component"
  }
}

3、wxml文件中:

1、這里設置了最小值是0,最大值是20。
2、bindoptionNum:是由bind+"optionNum"自定義組件回調函數的名稱組成。當自定義組件的函數回調是,這個屬性指定的方法bindoptionNum將被響應。并可以獲取傳入的值

<component-option-num bindoptionNum="showNumber" minNum="0" maxNum="20"></component-option-num>

一、自定義組件的定義

1、 對外提供的自定義屬性值

  /**
   * 組件的屬性列表
   */
  properties: {  //最小值
     minNum:{       type:Number,
       value: NaN
     },//最大值
     maxNum:{       type:Number,
       value:NaN
     },
  },

2、 組件內部使用的數據

  /**
   * 組件的初始數據
   */
  data: {
    num: 0,                //輸入框顯示的數量
    disabledMin: false,    //"-"是否可點擊,true 不能點擊
    disabledMax:false    //"+"是否可點擊,true 不能點擊
  },

3、 增加數量方法

   _add: function (e) {
      let num = parseInt(this.data.num) + 1
      if (this.checkIsMaxNum(num)) {       
     /**
       * 大于最大數值,將輸入框的值設置為最大值,
       * 且"+"不能點擊、"-"可點擊
       */ 
        num = this.data.maxNum        this.data.disabledMax = true 
        this.data.disabledMin = false
      }else {        this.data.disabledMin = false
        this.data.disabledMax = false 
      }      this.setData({
        num: num,
        disabledMin: this.data.disabledMin,
        disabledMax: this.data.disabledMax
      })      //回調optionNum方法,將輸入框num值傳遞給使用該組件的函數
      this.triggerEvent('optionNum', { num: num })
    },

4、減少數量

    _reduce: function (e) {
      let num, disabledMin, disabledMax
      num = parseInt(this.data.num) - 1
      if (this.checkIsMinNum(num)) { //小于最小數
       /**
     * 小于最小數值,將輸入框的值設置為最小值,
     * 且"-"不能點擊、"+"可點擊
     */ 
        num = this.data.minNum
        disabledMin = true
        disabledMax = false
      }else{
        disabledMin = false
        disabledMax = false
      }      this.setData({
        num: num,
        disabledMin: disabledMin,
        disabledMax: disabledMax
      })      //回調optionNum方法,將輸入框num值傳遞給使用該組件的函數
      this.triggerEvent('optionNum',{num:num})
    },

5、手動輸入數量

    _input: function (e) {
      let val = e.detail.value      //1、先用正則校驗輸入的第一個數字,當手動輸入“0”開頭的數字時,自行過濾,禁止輸入,只值輸入非0數字
      var num = val.replace(/^[0]+[0-9]*$/gi, "")       /**
     * 大于最大數值,將輸入框的值設置為最大值,且"+"不能點擊、"-"可點擊。反之亦然
     */ 
      if (this.checkIsMinNum(num)) {  //小于最小數
        this.data.disabledMin = true
        this.data.disabledMax = false
      } else if (this.checkIsMaxNum(num)) {    //大于最大數
        this.data.disabledMax = true
        this.data.disabledMin = false
      } else {        this.data.disabledMin = false
        this.data.disabledMax = false
      }      this.setData({
        num: num,
        disabledMin: this.data.disabledMin,
        disabledMax:this.data.disabledMax
      })      this.triggerEvent('optionNum', { num: num })
    },

6、失去焦點

  _blur:function(e){
      let val = e.detail.value      
      let num = val.replace(/^[0]+[0-9]*$/gi, "")      
      let disabledMin, disabledMax      
      if (this.checkIsMinNum(num)) {    //輸入的數量 小于最小的數,則輸入框顯示最小值
        num = this.data.minNum
        disabledMin = true
        disabledMax = false
      } else if (this.checkIsMaxNum(num)) {     //輸入的數量 大于最大的數,則輸入框顯示最大值
        this.data.disabledMax = true
        num = this.data.maxNum
        disabledMin = false
        disabledMax = true
      } else {     //輸入的數量 大于最小的數,則輸入框顯示輸入值
        disabledMin = false
        disabledMax = false
      }      this.setData({
        num: num,
        disabledMin: disabledMin,
        disabledMax: disabledMax
      })      this.triggerEvent('optionNum', { num: num })
    },

附自定義組件的全部代碼

1、js中的代碼

// component/optionNumber-component/optionNumber-component.jsComponent({  /**
   * 組件的屬性列表
   */
  properties: {
     minNum:{
       type:Number,
       value: NaN
     },

     maxNum:{
       type:Number,
       value:NaN
     },
  },  /**
   * 組件的初始數據
   */
  data: {
    num: 0,
    disabledMin: false,
    disabledMax:false
  },

  lifetimes:{    // 初始化數據
    attached:function(){
      let num, disabledMin, disabledMax      
      if (this.checkIsMinNum(this.data.num)) { //小于最小數
        num = this.data.minNum
        disabledMin = true
        disabledMax = false
      } else if (this.checkIsMaxNum(this.data.num)){     //大于最大數
        num = this.data.maxNum
        disabledMax = true
        disabledMin = false
      }else {
        num = this.data.num
        disabledMin = false
        disabledMax = false
      }      this.setData({
        num: num,
        disabledMin: disabledMin,
        disabledMax: disabledMax
      })
    },
  },  /**
   * 組件的方法列表
   */
  methods: {    // 減少數量
    _reduce: function (e) {
      // console.log("_reduce======", this.data.maxNum)
      let num, disabledMin, disabledMax
      num = parseInt(this.data.num) - 1
      if (this.checkIsMinNum(num)) { //小于最小數
        num = this.data.minNum
        disabledMin = true
        disabledMax = false
      }else{
        disabledMin = false
        disabledMax = false
      }      this.setData({
        num: num,
        disabledMin: disabledMin,
        disabledMax: disabledMax
      })      // console.log("disabledMin======", this.data.disabledMin)
      this.triggerEvent('optionNum',{num:num})
    },    // 增加數量
    _add: function (e) {
      let num = parseInt(this.data.num) + 1
      // console.log("_add======", this.data.maxNum)
      if (this.checkIsMaxNum(num)) {        //大于最大數
        num = this.data.maxNum        this.data.disabledMax = true 
        this.data.disabledMin = false
      }else {        this.data.disabledMin = false
        this.data.disabledMax = false 
      }      this.setData({
        num: num,
        disabledMin: this.data.disabledMin,
        disabledMax: this.data.disabledMax
      })      this.triggerEvent('optionNum', { num: num })
    },    // 手動輸入數量
    _input: function (e) {
      let val = e.detail.value      var num = val.replace(/^[0]+[0-9]*$/gi, "")      if (this.checkIsMinNum(num)) {  //小于最小數
        this.data.disabledMin = true
        this.data.disabledMax = false
      } else if (this.checkIsMaxNum(num)) {    //大于最大數
        this.data.disabledMax = true
        this.data.disabledMin = false
      } else {        this.data.disabledMin = false
        this.data.disabledMax = false
      }      this.setData({
        num: num,
        disabledMin: this.data.disabledMin,
        disabledMax:this.data.disabledMax
      })      this.triggerEvent('optionNum', { num: num })
    },  // 失去焦點
    _blur:function(e){
      // console.log("_confirm======")
      let val = e.detail.value      
      let num = val.replace(/^[0]+[0-9]*$/gi, "")      
      let disabledMin, disabledMax      
      if (this.checkIsMinNum(num)) {    //輸入的數量 小于最小的數,則輸入框顯示最小值
        num = this.data.minNum
        disabledMin = true
        disabledMax = false
      } else if (this.checkIsMaxNum(num)) {     //輸入的數量 大于最大的數,則輸入框顯示最大值
        this.data.disabledMax = true
        num = this.data.maxNum
        disabledMin = false
        disabledMax = true
      } else {     //輸入的數量 大于最小的數,則輸入框顯示輸入值
        disabledMin = false
        disabledMax = false
      }      this.setData({
        num: num,
        disabledMin: disabledMin,
        disabledMax: disabledMax
      })      this.triggerEvent('optionNum', { num: num })
    },    // 檢查是否是最大數
    checkIsMaxNum: function (checkNum) {
      return this.data.maxNum != "NaN" && checkNum >= this.data.maxNum
    },    // 檢查是否是最小數
    checkIsMinNum: function (checkNum) {
      return this.data.minNum != "NaN" && checkNum <= this.data.minNum
    }
  }
})

2、wxml中的代碼

<view class='optionView'>
  <button class="item" bindtap="_reduce" disabled="{{disabledMin}}" style="border:0;background:white" plain='true'>
    <image class="imgReduce" src="{{disabledMin ? '/images/icon/ic_reduce_grey.png' : '/images/icon/ic_reduce.png'}}"></image>
  </button>
  <view class="space">|</view>
  <view class="item">
    <input class="inputNum" type='number' maxlength='3' bindinput="_input" value="{{num}}" placeholder="0" confirm-type="確認" bindblur="_blur" placeholder-style="font-size:26rpx;color:#C81432"></input>
  </view>
  <view class="space">|</view>
  <button class="item" bindtap="_add" disabled="{{disabledMax}}" style="margin-left:6rpx;border:0;background:white" plain='true'>
    <image class="imgAdd" src="{{disabledMax ? '/images/icon/ic_add_grey.png' : '/images/icon/ic_add.png'}}"></image>
  </button></view>

3、wxss中的代碼

.optionView{
  height: 58rpx;  
  width: 240rpx;  
  display: flex;  
  flex-direction: row;  
  border: 1rpx solid #999;  
  border-radius: 10rpx;  
  justify-content: space-around;  
  align-items: center;  
  align-content: center;  
  background: white;  
  margin-right: 64rpx;}.item{  flex: 1;  display: flex;  align-items: center;  align-content: center;  justify-content: space-around;}.space{  height: 40rpx;  width: 1rpx;  color:  #999;  font-size: 30rpx;}.imgAdd{  width: 16rpx;  height: 16rpx;  padding-top: 14rpx;  padding-bottom: 14rpx}.imgReduce{  width: 16rpx;  height: 3.5rpx;  padding-top: 18rpx;  padding-bottom: 18rpx}.inputNum{    width: 70rpx;    color: #C81432;    font-size: 26rpx;    text-align: center;    padding-left: 10rpx;    padding-right: 10rpx;}.textMax{  margin-top: 45rpx;  margin-bottom: 36rpx;}

4、json中的代碼

{
  "component": true,
  "usingComponents": {}}

以上就是小程序自定義組件的實現(案例解析)的詳細內容,更多請關注php中文網其它相關文章!


小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        日韩欧美精品在线视频| 国产精品一区二区免费不卡| 国产精品人妖ts系列视频| 久久国产尿小便嘘嘘尿| 欧美一二三区精品| 日韩在线a电影| 欧美一区二区三区白人| 久久成人麻豆午夜电影| 国产肉丝袜一区二区| 成人黄色av网站在线| 亚洲色欲色欲www在线观看| 欧美午夜在线观看| 日韩福利电影在线| 亚洲精品在线观看视频| 成人免费高清在线| 亚洲一区二区在线免费观看视频 | 日本视频中文字幕一区二区三区| 欧美久久免费观看| 久久精品av麻豆的观看方式| 国产精品丝袜一区| 欧美日韩夫妻久久| 国产99久久久国产精品免费看 | 日韩电影免费一区| 欧美高清在线视频| 欧美日韩一区三区| 成人亚洲一区二区一| 亚洲1区2区3区视频| 久久久久国产精品免费免费搜索| 91麻豆免费视频| 激情综合色播激情啊| 一区二区三区高清在线| 日韩免费高清电影| 欧美视频一区二区三区在线观看 | 蜜桃av一区二区在线观看| 中文字幕第一区| 91精品国产麻豆国产自产在线| 成人理论电影网| 日本va欧美va精品| 中文字幕日韩精品一区| 精品久久久久99| 在线不卡一区二区| 99国产精品久| 国产成人av一区二区| 久久激情五月婷婷| 蜜臀av性久久久久蜜臀av麻豆| 一区二区三区在线播放| 国产精品乱码一区二区三区软件| 欧美xfplay| 8v天堂国产在线一区二区| 欧洲精品一区二区三区在线观看| 成人短视频下载| 国产精品自拍一区| 久久99精品国产.久久久久久 | 99国产精品视频免费观看| 国模娜娜一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 精品一区二区影视| 美女视频一区二区| 日日摸夜夜添夜夜添国产精品| 亚洲大片在线观看| 一区二区日韩av| 亚洲精品亚洲人成人网| 一区二区三区丝袜| 亚洲成人免费电影| 亚洲超碰精品一区二区| 天堂一区二区在线| 日韩av一级片| 国产一区二区在线免费观看| 精品一区二区在线看| 国产高清不卡一区| 成人一区在线观看| 成人国产亚洲欧美成人综合网 | 久久不见久久见免费视频1| 奇米影视一区二区三区小说| 奇米色777欧美一区二区| 蜜臀av性久久久久蜜臀aⅴ| 久久99久国产精品黄毛片色诱| 国产一区在线看| 成人综合在线观看| 91麻豆蜜桃一区二区三区| 在线视频一区二区三区| 7777精品伊人久久久大香线蕉完整版 | 亚洲尤物视频在线| 日韩综合在线视频| 国产精品888| 欧美性色黄大片| 欧美一区二区三区在线观看| 久久日一线二线三线suv| 中文av一区二区| 亚洲高清不卡在线观看| 蜜桃av一区二区| 丁香桃色午夜亚洲一区二区三区| 色综合天天综合在线视频| 日韩一二在线观看| 最新久久zyz资源站| 天堂影院一区二区| 高清视频一区二区| 久久久久国产精品人| 精品国产91洋老外米糕| 亚洲欧美区自拍先锋| 亚洲成av人片| 在线看国产一区| 欧美一区二区视频在线观看2022| 欧美本精品男人aⅴ天堂| 国产精品免费视频一区| 天天免费综合色| 国产成人精品一区二区三区网站观看| 91麻豆国产福利精品| 欧美一级高清大全免费观看| 成人免费一区二区三区视频| 狂野欧美性猛交blacked| 91免费看片在线观看| 久久久精品tv| 美女视频黄 久久| 欧美日本国产视频| 成人免费一区二区三区在线观看| 韩国三级中文字幕hd久久精品| 欧美色成人综合| 亚洲免费在线观看视频| 国产成人aaaa| 精品国产91亚洲一区二区三区婷婷| 亚洲伊人伊色伊影伊综合网| 成人精品免费网站| 亚洲精品一区二区在线观看| 性久久久久久久| 在线视频你懂得一区二区三区| 国产精品天干天干在观线| 久久精品国产一区二区三区免费看 | 亚洲欧美在线视频| 国产伦理精品不卡| 欧美www视频| 极品销魂美女一区二区三区| 欧美一区二区三区四区五区| 亚洲国产成人porn| 91蜜桃视频在线| 亚洲欧洲精品一区二区精品久久久 | 欧洲在线/亚洲| 亚洲一二三区在线观看| 欧日韩精品视频| 一区二区三区日韩欧美精品| 在线视频欧美区| 亚洲成人手机在线| 欧美猛男超大videosgay| 亚洲一区二区三区四区在线免费观看| 91丨九色丨黑人外教| 亚洲天堂中文字幕| 91麻豆swag| 亚洲国产综合人成综合网站| 91麻豆精品国产| 久草这里只有精品视频| 精品国产伦一区二区三区观看方式 | 91视频在线观看免费| 综合久久久久久| 欧美在线一二三| 麻豆精品久久精品色综合| 精品免费国产一区二区三区四区| 国产一区二区三区日韩| 国产精品天干天干在线综合| 色婷婷综合久色| 三级一区在线视频先锋| 久久亚洲私人国产精品va媚药| 成人激情黄色小说| 天天爽夜夜爽夜夜爽精品视频| 精品久久久久久久久久久久久久久久久 | 色综合天天综合色综合av | 中文字幕免费观看一区| 91一区二区在线| 亚洲成人综合网站| 337p粉嫩大胆色噜噜噜噜亚洲 | 久久99国内精品| 中文字幕日韩一区二区| 91精品一区二区三区久久久久久| 精东粉嫩av免费一区二区三区 | 日韩女优制服丝袜电影| 国产91在线看| 日韩**一区毛片| 中文字幕一区免费在线观看 | 日韩一级欧美一级| 成人高清免费观看| 蜜臀精品久久久久久蜜臀 | 日韩国产精品大片| 国产精品女人毛片| 欧美成人一级视频| 欧美在线免费播放| 国产精品中文字幕日韩精品| 亚洲国产精品影院| 国产精品剧情在线亚洲| 欧美一区二区国产| 色菇凉天天综合网| 国产精品夜夜嗨| 蜜臀av性久久久久蜜臀aⅴ| 亚洲人成网站在线| 精品99久久久久久| 欧美一级在线免费| 欧美日韩免费电影| 色综合天天在线| 99精品国产视频| 国产成人av电影在线播放| 老司机一区二区| 美女尤物国产一区|