【问题标题】:vuejs element ui - add html inside el-selectvuejs element ui - 在 el-select 中添加 html
【发布时间】:2021-10-01 14:44:30
【问题描述】:

我有以下下拉列表:

var Main = {
  data() {
    return {
      drawer: {
        form: {
          period: null
        }
      },
      data : [
        {
          label: "JAN to MAR 2021",
          value: "1",
          current: true
        }, {
          label: "Apr to Jun 2021",
          value: "2",
          current: false
        }, {
          label: "Jul to Sep 2021",
          value: "3",
          current: false
        }, {
          label: "Oct to Dec 2021",
          value: "4",
          current: false
        }
      ]
    }
  },
  
   methods: {}
}

var Ctor = Vue.extend(Main);
new Ctor().$mount('#app');
@import url("//unpkg.com/element-ui@2.4.4/lib/theme-chalk/index.css");


.capsule {
    background: #e6e9f0;
    border-radius: 7.5px;
    height: 15px;
    line-height: 15px!important;
    color: #04246a;
    font-size: 10px;
    text-align: center;
    display: inline-block;
    padding: 0 6px;
    letter-spacing: .5px;
    text-transform: uppercase;
    max-width: 100%;
    text-overflow: ellipsis;
    overflow: hidden;
    word-break: normal;
    word-wrap: normal;
}
<script src="//unpkg.com/vue/dist/vue.js"></script>
<script src="//unpkg.com/element-ui@2.4.11/lib/index.js"></script>

<div id="app">
<el-select v-model="drawer.form.period" value-key="value">
            <el-option
              v-for="item in data"
              :key="item.value"
              :label="item.label"
              :value="item.value">

              <span>{{ item.label }}</span>
              <div v-if="item.current" class="capsule secondary" >Current</div> 

            </el-option>
            <template slot="suffix">
              <div class="suffix capsule secondary">Current</div>
            </template>
          </el-select>
</div>

I want when the item with current=true is selected to also show the current tag inside the dropdown, like following:

我怎样才能做到这一点?

【问题讨论】:

    标签: javascript vue.js element-ui


    【解决方案1】:

    很遗憾,el-select 组件没有suffix 插槽。作为一种解决方法,您可以使用 prefix 插槽并调整 CSS 使其位于右侧。

    var Main = {
      data() {
        return {
          drawer: {
            form: {
              period: null
            }
          },
          data : [
            {
              label: "JAN to MAR 2021",
              value: "1",
              current: true
            }, {
              label: "Apr to Jun 2021",
              value: "2",
              current: false
            }, {
              label: "Jul to Sep 2021",
              value: "3",
              current: false
            }, {
              label: "Oct to Dec 2021",
              value: "4",
              current: false
            }
          ]
        }
      },
      
      computed: {
        isCurrent() {
          return this.data.find(item => item.value === this.drawer.form.period)?.current;
        }
      },
      
      methods: {}
    }
    
    var Ctor = Vue.extend(Main);
    new Ctor().$mount('#app');
    @import url("//unpkg.com/element-ui@2.4.4/lib/theme-chalk/index.css");
    
    
    .capsule {
        background: #e6e9f0;
        border-radius: 7.5px;
        height: 15px;
        line-height: 15px!important;
        color: #04246a;
        font-size: 10px;
        text-align: center;
        display: inline-block;
        padding: 0 6px;
        letter-spacing: .5px;
        text-transform: uppercase;
        max-width: 100%;
        text-overflow: ellipsis;
        overflow: hidden;
        word-break: normal;
        word-wrap: normal;
    }
    
    .el-input--prefix .el-input__inner {
      padding-left: 15px;
      padding-right: 60px;
    }
    
    .el-input__prefix {
      right: 25px;
      left: initial;
      
      display: flex;
      align-items: center;
    }
    <script src="//unpkg.com/vue/dist/vue.js"></script>
    <script src="//unpkg.com/element-ui@2.4.11/lib/index.js"></script>
    
    <div id="app">
    <el-select v-model="drawer.form.period" value-key="value">
                <el-option
                  v-for="item in data"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
    
                  <span>{{ item.label }}</span>
                  <div v-if="item.current" class="capsule secondary" >Current</div> 
    
                </el-option>
                <template slot="prefix">
                  <div v-if="isCurrent" class="suffix capsule secondary">Current</div>
                  
                </template>
              </el-select>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多