最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue下拉選擇框Select組件使用詳解(二)

 更新時(shí)間:2022年03月04日 11:30:33   作者:theMuseCatcher  
這篇文章主要為大家詳細(xì)介紹了Vue下拉選擇框Select組件的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Vue下拉選擇框Select組件的使用方法,供大家參考,具體內(nèi)容如下

效果圖如下:

下拉組件寬度可自定義設(shè)置以下屬性:

①下拉組件寬度width屬性,默認(rèn)寬度290

②placeholder屬性

③是否禁用下拉的disabled屬性

已預(yù)設(shè)下拉列表最多8條,超過時(shí)滾動顯示,具體可自定義調(diào)整,如果下拉選項(xiàng)過長省略號顯示,鼠標(biāo)懸浮顯示全稱,由于業(yè)務(wù)需求,設(shè)置mode屬性,區(qū)別默認(rèn)name和value  與  dictKey和dictVal

①創(chuàng)建組件Select.vue

<template>
? <div class="m-select-wrap f14" :style="`width: ${width}px;`">
? ? <input
? ? ? :class="['u-select-input', { 'disabled': disabled }]"
? ? ? :style="`width: ${width - 32}px;`"
? ? ? type="text"
? ? ? :disabled="disabled"
? ? ? :placeholder="placeholder"
? ? ? readonly
? ? ? :title="selectName"
? ? ? @click="openSelect"
? ? ? @blur="onBlur"
? ? ? v-model="selectName" />
? ? <div :class="['triangle-down', { 'rotate': rotate, 'disabled': disabled }]" @click="openSelect"></div>
? ? <div :class="['m-options-panel', showOptions ? 'show': 'hidden']" :style="`height: ${selectData.length * 40}px; max-height: 320px; width: ${width - 2}px;`">
? ? ? <p class="u-option" :title="mode==='region' ? item.dictVal : item.name" @mousedown="getValue(mode==='region' ? item.dictVal : item.name, mode==='region' ? item.dictKey : item.value)" v-for="(item, index) in selectData" :key="index">
? ? ? ? {{ mode==='region' ? item.dictVal : item.name }}
? ? ? </p>
? ? </div>
? </div>
</template>
<script>
export default {
? name: 'Select',
? props: {
? ? selectData: {
? ? ? type: Array,
? ? ? default: () => {
? ? ? ? return []
? ? ? }
? ? },
? ? selValue: { // 將該prop值作為selV的初始值
? ? ? default: undefined
? ? },
? ? placeholder: {
? ? ? type: String,
? ? ? default: '請選擇'
? ? },
? ? width: { // 下拉框?qū)挾?
? ? ? type: Number,
? ? ? default: 290
? ? },
? ? disabled: {
? ? ? type: Boolean,
? ? ? default: false
? ? },
? ? mode: {
? ? ? type: String,
? ? ? default: 'default'
? ? }
? },
? computed: {
? ? selectName () {
? ? ? let selName
? ? ? this.selectData.forEach(item => {
? ? ? ? if (this.mode === 'region') {
? ? ? ? ? if (item.dictKey === this.selectValue) {
? ? ? ? ? ? selName = item.dictVal
? ? ? ? ? }
? ? ? ? } else {
? ? ? ? ? if (item.value === this.selectValue) {
? ? ? ? ? ? selName = item.name
? ? ? ? ? }
? ? ? ? }
? ? ? })
? ? ? return selName
? ? },
? ? selectValue: {
? ? ? get () {
? ? ? ? return this.selV
? ? ? },
? ? ? set (newVal) {
? ? ? ? this.selV = newVal
? ? ? }
? ? }
? },
? data () {
? ? return {
? ? ? selV: this.selValue,
? ? ? rotate: false,
? ? ? showOptions: false
? ? }
? },
? methods: {
? ? openSelect () {
? ? ? this.showOptions = !this.showOptions
? ? ? this.rotate = !this.rotate
? ? },
? ? getValue (name, value) {
? ? ? this.selectValue = value
? ? ? this.$emit('getValue', name, value)
? ? },
? ? onBlur () {
? ? ? this.showOptions = false
? ? ? this.rotate = false
? ? }
? }
}
</script>
<style lang="less" scoped>
.m-select-wrap {
? display: inline-block;
? width: 290px;
? height: 40px;
? line-height: 40px;
? position: relative;
? font-weight: 400;
? color: #444444;
? .u-select-input {
? ? padding-left: 10px;
? ? width: 258px;
? ? height: 38px;
? ? border: 1px solid #d7d7d7;
? ? cursor: pointer;
? ? padding-right: 20px;
? ? overflow: hidden;
? ? text-overflow: ellipsis;
? ? white-space: nowrap;
? ? &:focus {
? ? ? border: 1px solid @mainColor;
? ? }
? }
? .triangle-down { // 下三角
? ? width: 12px;
? ? height: 7px;
? ? font-size: 0;
? ? background: url('~@/assets/images/triangle.png') no-repeat center top;
? ? position: absolute;
? ? top: 17px;
? ? right: 10px;
? ? transition: all 0.3s ease-in-out;
? ? cursor: pointer;
? }
? .rotate {
? ? transform: rotate(180deg);
? ? -webkit-transform: rotate(180deg);
? }
? .disabled {
? ? cursor: default;
? ? pointer-events: none;
? }
? .m-options-panel {
? ? position: absolute;
? ? overflow-y: auto;
? ? background: #FFFFFF;
? ? width: 288px;
? ? border: 1px solid @mainColor;
? ? top: 40px;
? ? left: 0;
? ? color: #444;
? ? .u-option {
? ? ? padding: 0 20px;
? ? ? overflow: hidden;
? ? ? text-overflow: ellipsis;
? ? ? white-space: nowrap; // 溢出顯示省略號
? ? ? cursor: pointer;
? ? }
? ? .u-option:hover {
? ? ? background: #EEEEEE;
? ? }
? }
? .show {
? ? display: block;
? }
? .hidden {
? ? display: none;
? }
}
</style>

②在要使用的頁面中引用

<Select
? ? ? :selectData="provinceData"
? ? ? :selValue="address.province"
? ? ? :width="143"
? ? ? placeholder="請選擇省"
? ? ? @getValue="getProvinceCode" />
import Select from '@/components/Select'
components: {
? ? Select
},
data () {
? ? return {
? ? ? provinceData: [],
? ? ? ? address: {
? ? ? ? ? province: ''
? ? ? ? }
? ? }
}
methods: {
? getProvinceCode (name, code) {
? ? ? console.log('province:', name, code)
? ? ? this.address.province = code
? }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue+Element?UI實(shí)現(xiàn)復(fù)制當(dāng)前行數(shù)據(jù)的功能

    Vue+Element?UI實(shí)現(xiàn)復(fù)制當(dāng)前行數(shù)據(jù)的功能

    這篇文章主要介紹了如何使用Vue?+?Element?UI?實(shí)現(xiàn)在列表的操作欄新增一個(gè)復(fù)制按鈕,復(fù)制當(dāng)前行的數(shù)據(jù)可以打開新增彈窗后亦可以跳轉(zhuǎn)到新增頁面,感興趣的小伙伴可以參考下
    2023-11-11
  • Vue watch 偵聽對象屬性詳解

    Vue watch 偵聽對象屬性詳解

    Vue的watch偵聽器格式有兩種:方法格式和對象格式的偵聽器,這篇文章主要介紹了Vue watch 偵聽對象屬性相關(guān)知識,需要的朋友可以參考下
    2023-04-04
  • vue使用vant中的checkbox實(shí)現(xiàn)全選功能

    vue使用vant中的checkbox實(shí)現(xiàn)全選功能

    這篇文章主要為大家詳細(xì)介紹了vue使用vant中的checkbox實(shí)現(xiàn)全選功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Vue Build后的項(xiàng)目的根路徑配置方式

    Vue Build后的項(xiàng)目的根路徑配置方式

    這篇文章主要介紹了Vue Build后的項(xiàng)目的根路徑配置方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue3中引入scss文件的方法步驟

    Vue3中引入scss文件的方法步驟

    這篇文章主要給大家介紹了關(guān)于Vue3中引入scss文件的方法步驟,在實(shí)際項(xiàng)目中,各種樣式往往有很多重復(fù)的情況,為了能夠使樣式的后續(xù)開發(fā)和維護(hù)更加愜意,將這些共同的代碼進(jìn)行命名然后調(diào)用這些變量是一個(gè)很好的選擇,需要的朋友可以參考下
    2023-08-08
  • 使用vue-cli3+typescript的項(xiàng)目模板創(chuàng)建工程的教程

    使用vue-cli3+typescript的項(xiàng)目模板創(chuàng)建工程的教程

    這篇文章主要介紹了使用vue-cli3+typescript的項(xiàng)目模板創(chuàng)建工程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • vuex中store.commit和store.dispatch的區(qū)別及使用方法

    vuex中store.commit和store.dispatch的區(qū)別及使用方法

    這篇文章主要介紹了vuex中store.commit和store.dispatch的區(qū)別及使用方法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue結(jié)合leaflet實(shí)現(xiàn)熱力圖

    vue結(jié)合leaflet實(shí)現(xiàn)熱力圖

    本文主要介紹了vue實(shí)現(xiàn)熱力圖,結(jié)合leaflet.heat插件可以很容易的做出熱力圖,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • VUE中如何實(shí)現(xiàn)阻止事件冒泡

    VUE中如何實(shí)現(xiàn)阻止事件冒泡

    這篇文章主要介紹了VUE中如何實(shí)現(xiàn)阻止事件冒泡,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue實(shí)現(xiàn)時(shí)間倒計(jì)時(shí)功能

    vue實(shí)現(xiàn)時(shí)間倒計(jì)時(shí)功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)時(shí)間倒計(jì)時(shí)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

阜南县| 扶沟县| 汝城县| 郑州市| 三河市| 嘉峪关市| 库尔勒市| 宜州市| 图们市| 资中县| 彩票| 中卫市| 兴和县| 秀山| 崇义县| 额尔古纳市| 惠东县| 贵阳市| 康马县| 易门县| 德钦县| 万山特区| 疏附县| 永靖县| 腾冲县| 蒙自县| 丰城市| 武山县| 博白县| 确山县| 革吉县| 宁安市| 东台市| 阜宁县| 津市市| 无棣县| 健康| 南昌县| 潼关县| 台中县| 濮阳市|