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

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

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

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

        更新時間: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中文網其它相關文章!


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

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

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 国产一精品一AV一免费| 一区二区三区在线免费观看视频| 日本三级在线观看免费| ZZIJZZIJ亚洲日本少妇JIZJIZ| 国产精品亚洲av色欲三区| 免费爱爱的视频太爽了| 亚洲香蕉在线观看| 色妞WWW精品免费视频| 久久夜色精品国产噜噜亚洲a| 黄色片在线免费观看| 男人天堂2018亚洲男人天堂 | 无忧传媒视频免费观看入口| 永久黄网站色视频免费观看| 亚洲精品av无码喷奶水糖心| 免费看www视频| 羞羞视频免费网站含羞草| 亚洲国产成人久久一区久久| 一区二区三区视频免费观看| 国产AV无码专区亚洲AV毛网站 | 免费夜色污私人影院网站电影| 亚洲国产黄在线观看 | xxxxx做受大片视频免费| 国产亚洲视频在线播放| 成人A片产无码免费视频在线观看 成人电影在线免费观看 | 亚洲色欲色欲www在线丝| 成人久久免费网站| 亚洲成aⅴ人片在线观| 歪歪漫画在线观看官网免费阅读| 亚洲youjizz| 亚洲AⅤ视频一区二区三区 | 精品亚洲成α人无码成α在线观看 | 亚洲日韩久久综合中文字幕| 四虎影库久免费视频| 黄色视频在线免费观看| 亚洲国产人成网站在线电影动漫| 日韩免费一区二区三区在线| 亚洲爆乳无码专区www| 中文字幕亚洲乱码熟女一区二区 | 日本免费中文字幕在线看| 精品久久久久久无码免费| 亚洲国产精品专区|