91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序用組件創建select下拉選項框的方法

發布時間:2020-06-24 14:35:10 來源:億速云 閱讀:3412 作者:Leah 欄目:web開發

這篇文章將為大家詳細講解有關微信小程序用組件創建select下拉選項框的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

第一步:創建組件所需的文件

我喜歡把共用的內容都放在和pages文件同級的地方,所以有了下面的目錄結構

微信小程序用組件創建select下拉選項框的方法

  1. 先創建一個自定義名字的文件夾,例如我上面的Componet

  2. 再創建一個select文件夾,然后:右鍵這個文件夾,新建下面的這個Component。然后輸入需要創建的名稱,我這里為了方便就取了select的名字。然后就會自動創建4個文件,js、json、wxml、wxss。

微信小程序用組件創建select下拉選項框的方法

第二步:開始配置組件

注意:如果通過第一步創建的可直接跳過第二步。

  1. 通過第一步創建的組件的文件夾中,已經自動配置好了。只需在引入組件的時候,在引入組件的頁面的json文件中配置組件的名稱和組件的位置。

  2. 如果自己手動創建組件的js、json、wxml、wxss這個文件,那么需要在json文件中填入 "component": true 表示自定義組件聲明。js文件中也需要寫成這種格式:

Component({
  properties: {    // 這里定義了innerText屬性,屬性值可以在組件使用時指定    innerText: {
      type: String,
      value: 'default value',
    }
  },
  data: {    // 這里是一些組件內部數據    someData: {}
  },
  methods: {    // 這里是一個自定義方法
    customMethod: function(){}
  }
})

第三步:自定義組件樣式及js。

注意:這里可以在 app.jsonpages 中把組件所在的頁面放到第一位,這樣就能在組件的頁面編寫代碼了,比如我上面的目錄結構:就需要寫成 "Componet/select/select", 后面再是其它的頁面。這樣方便得多。

1. 組件的wxml

<view class='com-selectBox'>
    <view class='com-sContent' bindtap='selectToggle'>
        <view class='com-sTxt'>{{nowText}}</view>
        <image src='../../public/img/local/down.png'  class='com-sImg'  animation="{{animationData}}"></image>
    </view>
    <view class='com-sList' wx:if="{{selectShow}}">
        <view wx:for="{{propArray}}" data-index="{{index}}" wx:key='' class='com-sItem' bindtap='setText'>{{item.text}}</view>
    </view></view>
  1. (1)  animation="{{animationData}}" 這個是下箭頭的動畫效果

  2. (2)  data-index="{{index}}" 這個是當前元素被點擊時的索引

  3. (3) selectToggle是模仿下拉選項框隱藏和顯示的事件。

  4. (4) setText是模仿下拉選項框選擇子項之后,設置內容的事件。

  5. (5) selectShow是表示option選項顯示與否

2. 組件的wxss

.com-selectBox{
    width: 200px;
}.com-sContent{
    border: 1px solid #e2e2e2;
    background: white;
    font-size: 16px;
    position: relative;
    height: 30px;
    line-height: 30px;
}.com-sImg{
    position: absolute;
    right: 10px;
    top: 11px;
    width: 16px;
    height: 9px;
    transition: all .3s ease;
}.com-sTxt{
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    padding:0 20px 0 6px;
    font-size: 14px;
}.com-sList{
    background: white;
    width: inherit;
    position: absolute;
    border: 1px solid #e2e2e2;
    border-top: none;
    box-sizing: border-box;
    z-index: 3;
    max-height: 120px;
    overflow: auto;
}.com-sItem{
    height: 30px;
    line-height: 30px;
    border-top: 1px solid #e2e2e2;
    padding: 0 6px;
    text-align: left;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 14px;
}.com-sItem:first-child{
    border-top: none;
}

3. 組件的 js

// Componet/Componet.jsComponent({  /**
   * 組件的屬性列表   */
    properties: {
        propArray:{
            type:Array,
        }
    },  /**
   * 組件的初始數據   */
    data: {
        selectShow:false,//初始option不顯示
        nowText:"請選擇",//初始內容
        animationData:{}//右邊箭頭的動畫    },  /**
   * 組件的方法列表   */
    methods: {
   //option的顯示與否
        selectToggle:function(){            var nowShow=this.data.selectShow;//獲取當前option顯示的狀態
            //創建動畫
            var animation = wx.createAnimation({
                timingFunction:"ease"
            })            this.animation=animation;            if(nowShow){
                animation.rotate(0).step();                this.setData({
                    animationData: animation.export()
                })
            }else{
                animation.rotate(180).step();                
                this.setData({
                    animationData: animation.export()
                })
            }            this.setData({
                selectShow: !nowShow
            })
        },        //設置內容
        setText:function(e){            var nowData = this.properties.propArray;//當前option的數據是引入組件的頁面傳過來的,所以這里獲取數據只有通過this.properties
            var nowIdx = e.target.dataset.index;//當前點擊的索引
            var nowText = nowData[nowIdx].text;//當前點擊的內容
            //再次執行動畫,注意這里一定,一定,一定是this.animation來使用動畫
            this.animation.rotate(0).step();            this.setData({
                selectShow: false,
                nowText:nowText,
                animationData: this.animation.export()
            })
        }
    }
})
  1. (1) 組件的 properties 屬性是對外屬性,我理解的是可以當做 data 數據來使用,它是一個含有三個屬性的對象,分別是 type 表示屬性類型、 value 表示屬性初始值、 observer 表示屬性值被更改時的響應函數。type 是必填的,其它的可選。如果只有 type,可以寫成:屬性名:type類型

  2. (2) 組件的 data 和普通頁面的data一樣,是組件的內部數據,和 properties 一同用于組件的模版渲染。

  3. (3) 組件的 method 是專門用于 事件響應函數 和 任意的自定義方法。在這里面獲取數據有兩種方法:一種是獲取data里的數據: this.data.屬性名;一種是獲取 properties 中的屬性值: this.properties.屬性名

  4. (4) 創建animation動畫,作用在通過 true 和 false 切換顯示狀態的內容上沒有過渡、沒有過渡、沒有過渡

第四步:引入組件,傳入組件所需數據

1. 引入前,需要在引入組件的頁面的json文件中配置,比如我要在 index.wxml 中引入,那么在 index.json 中我就需要配置:

"usingComponents": {    "Select": "/Componet/select/select"}
  1. (1) Select 是你定義的組件的名稱,后面的是組件所在的位置。 /  單斜杠表示根目錄,是絕對路徑。

  2. (2) 如果出現下面這種說沒找到路徑的,一定是自己填寫的路徑不對,認真查找。

微信小程序用組件創建select下拉選項框的方法

2. 配置好后,就可以引入組件。

<Select prop-array='{{selectArray}}'></Select>

(1) prop-array 是我自定義的屬性名,這個是和組件所在的 js 中properties中的屬性是對應的。在 properties 定義的屬性中,屬性名采用駝峰寫法(例如:propArray);在引入組件的 wxml 中,指定屬性值時則對應使用連字符寫法(例如:prop-array="...")。

3. 最后就是傳入數據了。在引入組件的js的data中,添加:

selectArray: [{    "id": "10",    "text": "會計類"}, {    "id": "21",    "text": "工程類"}]

最終結果:

微信小程序用組件創建select下拉選項框的方法

如果引入兩個相同的組件,傳入的數據也相同:

<Select prop-array='{{selectArray}}'></Select><Select prop-array='{{selectArray}}'></Select>

這樣的方式組件并不會相互影響,都是獨立的。

對了,組件樣式的規則可以查看官方的規則

第五步:獲取點擊的內容,即組件間的通信

效果有了,最關鍵的是獲取選中的內容。這個怎么實現呢,這時候需要組建間通信與事件了。

1. 對組件的事件進行監聽:

<Select prop-array='{{selectArray}}' bind:myget='getDate'></Select>

(1) 這里myget是自定義的子組件需要觸發的事件名,getDate是引入組件的頁面需要獲取傳過來的數據的自定義的事件名。

2. 子組件觸發事件

因為這里的select組件是點擊下拉列表的內容才進行內容的更新,所以這里只需要在下拉列表里添加一個點擊事件,而原來已經設置了setText事件。所以只需要在setText函數里面寫觸發事件就行了。

在setText函數的內容里加上:

var nowDate={
    id:nowIdx,
    text:nowText
}this.triggerEvent('myget', nowDate)
  1. (1) 這里的 myget 和 bind:myget ,名稱一定要對應。

  2. (2) nowDate是需要傳回的數據,不一定要弄成對象,想傳什么傳什么,我這里只是演示而已。我試了一下也可以傳函數。。。

3. 引入組件的頁面的js

添加引入組件時,自定義的函數:

getDate:function(e){
    console.log(e.detail)
}

e的內容為:

微信小程序用組件創建select下拉選項框的方法

傳過來的值就在detail里面。

到此,一個完整的select組件就完成了。

更新:

如果要select組件默認顯示傳入的第一個數據,做法是:

  1. (1) 在select組件的wxml頁面,在class為com-sTxt的view標簽中,原來的 {{ nowText }} 改為 {{ nowText==' ' ? propArray[0].text : nowText }}。

  2. (2) 然后在 select 組件 js文件 中原來nowText的值修改為 ‘ ’ 空。

  3. (3) 這樣的話就表示如果最初nowText為空,就顯示傳入數據的第一個值,否則就是選中的值

關于微信小程序用組件創建select下拉選項框的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浪卡子县| 栾城县| 重庆市| 克拉玛依市| 仲巴县| 赤壁市| 米林县| 凌海市| 塔河县| 岑溪市| 威信县| 凯里市| 法库县| 体育| 西城区| 大方县| 安陆市| 玉山县| 吴江市| 车致| 汝城县| 方山县| 泸西县| 游戏| 丰都县| 鄂尔多斯市| 若羌县| 鄂托克旗| 开封县| 玛曲县| 潞城市| 乌兰浩特市| 双柏县| 钦州市| 遂溪县| 镇平县| 邹城市| 卢氏县| 晋江市| 大宁县| 台北县|