1. 程式人生 > 其它 >基於elementUI二次封裝下拉框selecte元件(簡化上一篇)

基於elementUI二次封裝下拉框selecte元件(簡化上一篇)

優化點:選中的年份由父元件傳入,不傳即預設為空

step:

1、SchoolYear.vue:
<template>
  <el-select v-model="currentYear">
    <el-option v-for="item in tempYearList" :key="item.value" :label="`${item.text}學年`" :value="item.value" />
  </el-select>
</template>
<script>
export default {
  model: {
    prop: 
'selectedYear', event: 'yearChange' }, props: { yearList: Array, selectedYear: Number // model.prop為selectedYear,這裡就用selectedYear接收,預設是'value' }, watch: { currentYear: { handler(newVal) { this.$emit('yearChange', newVal) } } }, data() { return { currentYear:
this.selectedYear, tempYearList: [] } }, created() { this.yearList && this.yearList.length ? (this.tempYearList = this.yearList) : (this.tempYearList = [ { text: '2022', value: 2022 }, { text: '2021'
, value: 2021 }, { text: '2020', value: 2020 } ]) } } </script>

2、引入並使用:

  data() {
    return {
      selected: 2020
  },
  methods: {
    handleSubmit() {
      console.log('已選年份', this.selected)
    }
  }
    <SchoolYear v-model="selected"></SchoolYear>
    <SchoolYear :selectedYear="selected" @yearChange="selected=$event"></SchoolYear>
    <button @click="handleSubmit">點選</button>

注意:如果使用v-model="selected"去替代:selectedYear="selected" @yearChange="selected=$event",那麼SchoolYear.vue元件中必須要重新宣告model的prop和event,否則不用宣告。