国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue2+ant-design-vue a-select組件二次封裝(支持單選/多選添加全選/分頁(yè)(多選跨頁(yè)選中)/自定義label)

這篇具有很好參考價(jià)值的文章主要介紹了vue2+ant-design-vue a-select組件二次封裝(支持單選/多選添加全選/分頁(yè)(多選跨頁(yè)選中)/自定義label)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、效果圖

vue2+ant-design-vue a-select組件二次封裝(支持單選/多選添加全選/分頁(yè)(多選跨頁(yè)選中)/自定義label),vue2基于Ant-Design-vue基礎(chǔ)組件封裝,vue.js,前端,ant-design-vue,a-select,select,option,封裝

二、參數(shù)配置

1、代碼示例

<t-antd-select
  v-model="selectVlaue"
  :optionSource="stepList"
  @change="selectChange"
/>

2、配置參數(shù)(Attributes)繼承 a-select Attributes

參數(shù) 說(shuō)明 類型 默認(rèn)值
v-model 綁定值 boolean / string / number/Array -
mode 設(shè)置’multiple’'tags’多選 (顯示全選) String -
optionSource 下拉數(shù)據(jù)源 Array -
width select寬度(可以設(shè)置百分比或px) String 100%
customLabel 是否自定義設(shè)置下拉label String -
valueKey 傳入的 option 數(shù)組中,要作為最終選擇項(xiàng)的鍵值 key String ‘key’
labelKey 傳入的 option 數(shù)組中,要作為顯示項(xiàng)的鍵值名稱 String ‘label’
isShowPagination 是否顯示分頁(yè)(分頁(yè)不顯示全選框) Boolean false
paginationOption 分頁(yè)配置項(xiàng) Object -

2-1、paginationOption配置參數(shù)(Attributes)繼承 a-pagination Attributes

參數(shù) 說(shuō)明 類型 默認(rèn)值
current 當(dāng)前頁(yè)數(shù) number 1
pageSize 每頁(yè)顯示條目個(gè)數(shù) number 6
total 總條目數(shù) number 0
bind 繼承a-pagination屬性 Object -

3、繼承 a-select&&a-pagination events

事件名 說(shuō)明 返回值
current-change 當(dāng)前頁(yè)碼 當(dāng)前選中的頁(yè)碼

三、源碼

<template>
  <div @mousedown="e => {
    e.preventDefault()
    selectOpen = true
  }" ref="main">
    <a-select
      class="t_select"
      v-model="childSelectedValue"
      :style="{width: width||'100%'}"
      :placeholder="placeholder"
      :open="selectOpen"
      @select="handleSelect"
      v-bind="attrs"
      v-on="$listeners"
      :mode="mode"
    >
      <template v-for="(index, name) in $slots" v-slot:[name]>
        <slot :name="name" />
      </template>
      <template v-for="(index, name) in $scopedSlots" v-slot:[name]="data">
        <slot :name="name" v-bind="data"></slot>
      </template>
      <div slot="dropdownRender" slot-scope="menu">
        <a-checkbox
          v-if="mode&&!isShowPagination"
          :checked="selectChecked"
          @change="selectAll"
          class="all_checkbox"
        >全選</a-checkbox>
        <v-nodes :vnodes="menu" />
        <div class="t_select__pagination" v-if="isShowPagination">
          <a-pagination
            :page-size.sync="paginationOption.pageSize"
            v-model="paginationOption.current"
            :total="paginationOption.total"
            @change="currentChange"
            v-bind="{
            size:'small',
            'hide-on-single-page':true,
            'showQuickJumper': true,
            ...$attrs,
            ...paginationOption.bind,
          }"
            v-on="$listeners"
          />
        </div>
      </div>
      <a-select-option
        v-for="(item,index) in optionSource"
        :key="index"
        :value="item[valueKey]"
      >{{customLabel?customLabelHandler(item):item[labelKey]}}</a-select-option>
    </a-select>
  </div>
</template>
<script>
export default {
  name: 'TAntdSelect',
  components: {
    VNodes: {
      functional: true,
      render: (h, ctx) => ctx.props.vnodes
    }
  },
  props: {
    value: {
      type: [String, Number, Array, Boolean, Object]
    },
    // 多選 'multiple'
    mode: {
      type: String
    },
    placeholder: {
      type: String,
      default: '請(qǐng)選擇'
    },
    // 選擇框?qū)挾?/span>
    width: {
      type: String
    },
    // 是否自定義設(shè)置下拉label
    customLabel: {
      type: String
    },
    // 傳入的option數(shù)組中,要作為最終選擇項(xiàng)的鍵值key
    valueKey: {
      type: String,
      default: 'key'
    },
    // 傳入的option數(shù)組中,要作為顯示項(xiàng)的鍵值名稱
    labelKey: {
      type: String,
      default: 'label'
    },
    // 下拉框組件數(shù)據(jù)源
    optionSource: {
      type: Array
    },
    // 是否顯示分頁(yè)
    isShowPagination: {
      type: Boolean,
      default: false
    },
    // 分頁(yè)配置項(xiàng)
    paginationOption: {
      type: Object,
      default: () => {
        return {
          pageSize: 6, // 每頁(yè)顯示條數(shù)
          current: 1, // 當(dāng)前頁(yè)
          total: 0 // 總條數(shù)
        }
      }
    }
  },
  data() {
    return {
      selectOpen: false
    }
  },
  computed: {
    childSelectedValue: {
      get() {
        return this.value || undefined
      },
      set(val) {
        this.$emit('input', val)
      }
    },
    attrs() {
      return {
        allowClear: true,
        showSearch: true,
        ...this.$attrs
      }
    },
    selectChecked: {
      get() {
        return this.childSelectedValue?.length === this.optionSource?.length
      },
      set(val) {
        // console.log('set', val)
        this.$emit('input', val)
      }
    }
  },
  mounted() {
    document.addEventListener('click', this.bodyCloseMenus)
  },
  beforeDestroy() {
    document.removeEventListener('click', this.bodyCloseMenus)
  },
  methods: {
    // 點(diǎn)擊空白區(qū)域
    bodyCloseMenus(e) {
      if (this.$refs.main && !this.$refs.main.contains(e.target)) {
        if (this.selectOpen == true) {
          this.selectOpen = false
        }
      }
    },
    // 點(diǎn)擊全選
    selectAll(val) {
      const options = JSON.parse(JSON.stringify(this.optionSource))
      if (val.target.checked) {
        this.childSelectedValue = options?.map(item => {
          return item[this.valueKey]
        })
        setTimeout(() => {
          this.$emit('change', this.childSelectedValue)
        }, 0)
      } else {
        this.childSelectedValue = null
      }
      this.selectOpen = false
    },
    handleSelect(value, option) {
      if (value) {
        this.selectOpen = false
      }
      this.$emit('select', value, option)
    },
    // 切換分頁(yè)
    currentChange(val) {
      // console.log('切換分頁(yè)', val)
      if (!this.mode) {
        this.childSelectedValue = null
      }
      setTimeout(() => {
        this.selectOpen = true
      }, 0)
      this.$emit('current-change', val)
    },
    // 自定義label顯示
    customLabelHandler(item) {
      // eslint-disable-next-line no-eval
      return eval(this.customLabel)
    }
  }
}
</script>
<style lang="scss">
.all_checkbox {
  margin-left: 12px;
  margin-top: 5px;
}
</style>

四、組件地址

gitHub組件地址

gitee碼云組件地址

五、相關(guān)文章

基于ElementUi再次封裝基礎(chǔ)組件文檔


基于ant-design-vue再次封裝基礎(chǔ)組件文檔


vue3+ts基于Element-plus再次封裝基礎(chǔ)組件文檔文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-715903.html

到了這里,關(guān)于vue2+ant-design-vue a-select組件二次封裝(支持單選/多選添加全選/分頁(yè)(多選跨頁(yè)選中)/自定義label)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [ant-design-vue] table組件列寬拖拽功能

    原有的樣式文件沒(méi)有使用的必要,個(gè)人添加的部分樣式內(nèi)容就符合需求了 vue3.x對(duì)應(yīng)的ant-design-vue中的table組件本身支持列寬的拖動(dòng)了,不需求額外的包的支持,根據(jù)Api說(shuō)明設(shè)置resizeColumn即可

    2024年01月23日
    瀏覽(28)
  • ant-design-vue中table組件使用customRender渲染v-html

    ant-design-vue遇到table中列表數(shù)據(jù)需要高亮渲染 1、customRender可以使用,但是使用v-html發(fā)現(xiàn)不生效還報(bào)錯(cuò) 2、customRender函數(shù)返回肯定是jsx語(yǔ)法,于是發(fā)現(xiàn)這樣寫可以

    2024年02月15日
    瀏覽(36)
  • vue3中使用ant-design-vue的layout組件實(shí)現(xiàn)動(dòng)態(tài)導(dǎo)航欄功能(1~2級(jí))

    vue3中使用ant-design-vue的layout組件實(shí)現(xiàn)動(dòng)態(tài)導(dǎo)航欄功能(1~2級(jí))

    目錄 0 前言 1 準(zhǔn)備工作 1.1 安裝ant-design-vue 1.2 安裝圖標(biāo)組件包 2 選擇組件 3 路由文件 4 Vue導(dǎo)航頁(yè)面 5 最終效果 ????????最近在自己搞一個(gè)前后端小項(xiàng)目,前端想使用ant-design-vue的layout組件實(shí)現(xiàn)動(dòng)態(tài)導(dǎo)航欄和面包屑,但是網(wǎng)上的資料較少,所以我就自己整合實(shí)現(xiàn)了一下,在此

    2024年02月15日
    瀏覽(27)
  • ant-design-vue在ios使用AUpload組件喚起了相機(jī),HTML的 `capture` 屬性

    ant-design-vue在ios使用AUpload組件喚起了相機(jī),HTML的 `capture` 屬性

    在使用ant design vue組件的上傳組件AUpload的時(shí)候有一個(gè)問(wèn)題,直接按照demo寫,在ios上會(huì)喚起相機(jī),但是實(shí)際上我們的需求是彈出選擇相冊(cè)/相機(jī)這個(gè)彈框。 解決辦法是加一個(gè)?cupture=\\\"null\\\"這個(gè)屬性即可 HTML attribute: capture - HTML: HyperText Markup Language | MDN The capture attribute specifies that

    2024年02月12日
    瀏覽(18)
  • html中如何用vue語(yǔ)法,并使用UI組件庫(kù) ,html中引入vue+ant-design-vue或者vue+element-plus

    html中如何用vue語(yǔ)法,并使用UI組件庫(kù) ,html中引入vue+ant-design-vue或者vue+element-plus

    前言 先說(shuō)一下本次應(yīng)用的場(chǎng)景,本次項(xiàng)目中,需要引入github中別人寫好的插件,插件比較大,沒(méi)有方法直接在自己項(xiàng)目中,把別人的項(xiàng)目打包合并生成html(類似于前端項(xiàng)目打包生成的 dist ),修改這里面的html,這種情況要么用原生js寫或者jquery還相對(duì)快一些,那為什么不直

    2024年02月10日
    瀏覽(28)
  • 關(guān)于 ant-design-vue resetFields 失效

    關(guān)于 ant-design-vue resetFields 失效

    關(guān)于 ant-design-vue resetFields 失效 背景: 遇到這樣的問(wèn)題使用 ant-design-vue useForm 來(lái)制作表單的時(shí)候, resetFields()失效 場(chǎng)景: 編輯 -賦值 新增 -初始值(問(wèn)題點(diǎn):新增的時(shí)候他就不 初始化 ) 方案: 1、調(diào)用 resetFields() 傳參 2、要么使用 reactive 明確定義初始值 解釋: 首先我這里講

    2024年01月17日
    瀏覽(23)
  • ant-design-vue 自由切換 暗黑模式dark

    ant-design-vue 自由切換 暗黑模式dark

    思路 引入 dark.css 文件 動(dòng)態(tài)切換 prefixCls 實(shí)現(xiàn)效果 我們來(lái)看看官網(wǎng)怎么說(shuō)的 官網(wǎng)地址 除了 less 定制主題 外,我們還提供了 CSS Variable 版本以支持動(dòng)態(tài)切換主題能力。你可以在 ConfigProvider 進(jìn)行體驗(yàn)。 調(diào)用 ConfigProvider 配置方法設(shè)置主題色: 默認(rèn)情況下,CSS Variable 會(huì)以 --ant 作

    2023年04月21日
    瀏覽(21)
  • 如何vue使用ant design Vue中的select組件實(shí)現(xiàn)下拉分頁(yè)加載數(shù)據(jù),并解決存在的一個(gè)問(wèn)題。

    如何vue使用ant design Vue中的select組件實(shí)現(xiàn)下拉分頁(yè)加載數(shù)據(jù),并解決存在的一個(gè)問(wèn)題。

    ? ? 需求:拉下菜單中數(shù)據(jù)過(guò)多,200條以上,就會(huì)導(dǎo)致select組件卡死。所以需要使用滑動(dòng)到底部使其分頁(yè)加載 ? ? 可以借助 onPopupScroll 事件來(lái)監(jiān)聽(tīng)下拉菜單的滾動(dòng)事件,并判斷當(dāng)前是否已經(jīng)到達(dá)了下拉菜單底部。具體可以通過(guò)以下步驟實(shí)現(xiàn): ? ? 1、在組件中綁定?@popupScro

    2023年04月20日
    瀏覽(38)
  • 國(guó)際化配置(ant-design-vue設(shè)置成中文)

    國(guó)際化配置(ant-design-vue設(shè)置成中文)

    vue3 + ts + ant-design-vue 引用ant-design-vue的組件時(shí),默認(rèn)是英文的。 官網(wǎng)說(shuō)明:https://www.antdv.com/components/date-picker-cn ? 我用的全局設(shè)置。在項(xiàng)目的App.vue文件里引入ant-design-vue自帶的zh_CN,用a-config-provider 將RouterView包裹起來(lái)。但是我發(fā)現(xiàn)設(shè)置了全局,在使用日期選擇框時(shí)還是英文,

    2024年02月22日
    瀏覽(17)
  • ant-design-vue表格Table行內(nèi)新增、編輯、刪除

    ant-design-vue表格Table行內(nèi)新增、編輯、刪除

    ant-design-vue表格Table進(jìn)行單元格內(nèi)新增、編輯、刪除等操作 如圖所示:

    2024年02月14日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包