仿寫elementui------select下拉框講解


1.父組件

<mia-form-item label="美食">
      <mia-select  v-model="food" :data="options" placeholder="請選擇美食">
        <mia-option label="區域一" value="shanghai"></mia-option>
        <mia-option label="區域二" value="beijing"></mia-option>
      </mia-select>
    </mia-form-item>

2.select組件(slot盛放option的代碼)

<template>
  <div class="mia-select">
    <div class="mia-input" @click="unfoldDrop">
      <input type="text" class="mia-input-inner" :placeholder="placeholder" v-model="anser.label" readonly>
      <i class="iconfont mia-drop-btn" :class="{unfold:unfold}">{{canOpenDrop ? '' : ''}}</i>
      <div class="mia-select-dropList" v-show="unfold">
        <mia-scroll height="274px">
          <ul>
            <slot></slot>
          </ul>
        </mia-scroll>
      </div>
    </div>
    <!-- msg:{{msg}} -->
  </div>
</template>

3.option組件

<template>
  <li @click="chooseSelect">{{label}}</li>
</template>

4.問題來了:option組件通過$emit只能跟父組件傳值,但是父組件里並沒有定義事件進行接受,那么我們如何將option的值傳給select呢?  

解決:

我們知道option父組件為select,可通過遍歷其子集加事件綁定接受數據:

1)在select里添加(不知如何找子集的可以打印this.$children進行查看):

  getSelect(msg){
      console.log('接收',msg);
      var obj={...msg};
      this.anser=obj;
      this.$emit("input",obj.value);
    }
  },
  mounted(){
    this.$children[0].$children.forEach(child => child.$on('chooseValue',this.getSelect))
  },

2.在option里頭添加

 chooseSelect(){
      var label=this.label,value=this.value;
      console.log('發射');
      this.$emit("chooseValue",{label,value});
    }

  

  

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM