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

vue如何實現(xiàn)級聯(lián)選擇器功能

 更新時間:2024年04月24日 17:07:05   作者:清音啊  
這篇文章主要介紹了vue如何實現(xiàn)級聯(lián)選擇器功能問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

vue實現(xiàn)級聯(lián)選擇器功能

vue開發(fā)中,通過使用 Element UI 的 el-cascader 組件來實現(xiàn)級聯(lián)選擇器功能

下面是一個示例代碼:

演示如何使用 el-cascader 組件初始化級聯(lián)選擇器,并設(shè)置默認(rèn)值為單位 測試1 和部門 測試11

<template>
  <div>
    <el-cascader
      v-model="selectedValues"
      :options="options"
      :props="props"
      @change="handleChange"
      placeholder="請選擇"
    ></el-cascader>
  </div>
</template>
<script>
export default {
  data() {
    return {
      // 初始化級聯(lián)選擇器的選中值
      selectedValues: [],
      // 級聯(lián)選擇器的數(shù)據(jù)源
      options: [
        {
          value: '1',
          label: '測試1',
          children: [
            { value: '2', label: '測試11' },
            { value: '3', label: '測試12' }
          ]
        }
      ],
      // 自定義配置,用于指定數(shù)據(jù)結(jié)構(gòu)中的屬性名
      props: {
        value: 'value',
        label: 'label',
        children: 'children'
      }
    };
  },
  methods: {
    // 監(jiān)聽級聯(lián)選擇器值變化事件
    handleChange(selectedValues) {
      console.log('選中的值:', selectedValues);
    }
  },
  created() {
    // 設(shè)置初始化選中值為單位 '測試1' 和部門 '測試12'
    this.selectedValues = ['1', '3'];
  }
};
</script>

在這個示例中:

options 數(shù)組包含了級聯(lián)選擇器的數(shù)據(jù)源,其中每個對象表示一個選項,包括 valuelabelchildren 屬性。

props 對象用于指定數(shù)據(jù)結(jié)構(gòu)中的屬性名,以便 el-cascader 組件正確地解析數(shù)據(jù)。

通過在 selectedValues 中設(shè)置初始選中值為單位 測試1 和部門 測試12,并將其綁定到 el-cascader 組件的 v-model 上,可以在初始化時選中指定的值。

vue級聯(lián)選擇器只傳最后一級

elementUI的級聯(lián)選擇器的v-modle接受的參數(shù)是一個數(shù)組,數(shù)組中的值是對應(yīng)樹形數(shù)組的節(jié)點值,但是在真實開發(fā)中后端可能只給返回了某一處單一節(jié)點,對el-cascader進(jìn)行2次封裝實現(xiàn)三級聯(lián)動

import arrayTreeFilter from 'array-tree-filter'

/*
* 雙層遞歸逆向查找某一節(jié)點的所有父級
* */
const findPatentValue = (array, value, valueName = 'value', childrenName = 'children') => {
  if (!value || !Array.isArray(array)) return []
  const result = []
  let valid = false
  const seek = (array, value) => {
    let parentValue = ''
    const up = (array, value, lastValue) => {
      array.forEach(v => {
        const val = v[valueName]
        const child = v[childrenName]
        if (val === value) {
          valid = true
          parentValue = lastValue
          return
        }
        if (child && child.length) up(child, value, val)
      })
    }
    up(array, value)
    if (parentValue) {
      result.unshift(parentValue)
      seek(array, parentValue)
    }
  }
  seek(array, value)
  return valid ? [...result, value] : []
}

/*
* 該組件主要是通過后端傳入的節(jié)點值來實現(xiàn)級聯(lián)的雙向數(shù)據(jù)綁定
* */
export default {
  model: {
    prop: 'value',
    event: 'change'
  },
  props: {
    value: {
      type: String,
      default: ''
    },
    options: {
      type: Array,
      default() {
        return []
      }
    },
    config: {
      type: Object,
      default() {
        return {
          value: 'value',
          label: 'label',
          children: 'children'
        }
      }
    }
  },
  data() {
    return {
      result: []
    }
  },
  watch: {
    value() {
      this.setResult()
    },
    options() {
      this.setResult()
    }
  },
  mounted() {
    this.setResult()
  },
  methods: {
    setResult() {
      const {config, options, value} = this
      const {value: valueName, children: childrenName} = config
      this.result = findPatentValue(options, value, valueName, childrenName)
      console.log(this.result)
    },
    /*
    * 當(dāng)級聯(lián)選擇器變化時候會觸發(fā)該事件
    * 向父級傳遞change事件來返回選中的節(jié)點id
    * 向父級傳遞realChange事件來返回選中的節(jié)點及其所有父節(jié)點和選中的所有l(wèi)abel的值
    * arrayTreeFilter 第三方庫用于篩查出選中的節(jié)點及其父節(jié)點
    * */
    areaChange(v = []) {
      this.result = v
      const value = v[v.length - 1] || ''
      this.$emit('change', value)
      const {options, config} = this
      const {value: valueName, label: labelName} = config
      const areas = arrayTreeFilter(options, (item, level) => item[valueName] === v[level])
        .map(o => o[labelName])
      this.$emit('realChange', v, areas)
    },
  },
  render(createElement) {
    const {areaChange, config, result} = this
    const {value, label} = config
    return createElement('el-cascader', {
      props: {
        options: this.options,
        value: result,
        size: 'small',
        clearable: true,
        placeholder: '請選擇',
        props: {
          value,
          label,
          checkStrictly: true
        }
      },
      on: {
        change: areaChange
      }
    })
  }
}


<ChoiceArea v-model="memberForm.regionCode" :options="areaOptions"
                          :config="{value: 'code', label: 'name', children: 'children'}"
                          @realChange="choiceAreaChange"
  
              />

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 手寫vue無限滾動指令的詳細(xì)過程

    手寫vue無限滾動指令的詳細(xì)過程

    今天在移動端項目中遇見一個需求,需要數(shù)據(jù)無限滾動,所以下面這篇文章主要給大家介紹了關(guān)于手寫vue無限滾動指令的詳細(xì)過程,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • vue-router跳轉(zhuǎn)頁面的方法

    vue-router跳轉(zhuǎn)頁面的方法

    本篇文章主要介紹了vue-router跳轉(zhuǎn)頁面的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 詳解vue 在移動端體驗上的優(yōu)化解決方案

    詳解vue 在移動端體驗上的優(yōu)化解決方案

    這篇文章主要介紹了vue 在移動端體驗上的優(yōu)化解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Vue組件基礎(chǔ)操作介紹

    Vue組件基礎(chǔ)操作介紹

    這篇文章主要介紹了Vue組件基礎(chǔ)操作,組件是vue.js最強(qiáng)大的功能之一,而組件實例的作用域是相互獨立的,這就意味著不同組件之間的數(shù)據(jù)無法相互進(jìn)行直接的引用
    2023-01-01
  • vue3中引入svg矢量圖的實現(xiàn)示例

    vue3中引入svg矢量圖的實現(xiàn)示例

    在項目開發(fā)過程中,我們經(jīng)常會用到svg矢量圖,本文主要介紹了vue3中引入svg矢量圖的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • vue使用import.meta.glob動態(tài)導(dǎo)入多個模塊方式

    vue使用import.meta.glob動態(tài)導(dǎo)入多個模塊方式

    文章介紹了Vite提供的`import.meta.glob`功能,用于動態(tài)導(dǎo)入多個模塊,它通過glob模式匹配文件,返回一個對象,鍵為文件路徑,值為返回Promise的動態(tài)導(dǎo)入函數(shù),支持eager模式直接導(dǎo)入和as選項指定導(dǎo)入方式,如原始字符串或文件URL,適用于Vite或Rollup項目
    2025-10-10
  • ESLint 是如何檢查 .vue 文件的

    ESLint 是如何檢查 .vue 文件的

    這篇文章主要介紹了ESLint 是如何檢查 .vue 文件的,幫助大家更好的理解和使用ESLINT,感興趣的朋友可以了解下
    2020-11-11
  • vue 自定義組件的寫法與用法詳解

    vue 自定義組件的寫法與用法詳解

    這篇文章主要介紹了vue 自定義組件的寫法與用法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2020-03-03
  • 解決vant框架做H5時踩過的坑(下拉刷新、上拉加載等)

    解決vant框架做H5時踩過的坑(下拉刷新、上拉加載等)

    這篇文章主要介紹了解決vant框架做H5時踩過的坑(下拉刷新、上拉加載等),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • element的el-table中記錄滾動條位置的示例代碼

    element的el-table中記錄滾動條位置的示例代碼

    這篇文章主要介紹了element的el-table中記錄滾動條位置的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評論

永仁县| 吉安县| 桐梓县| 剑河县| 洛隆县| 金昌市| 盐边县| 淮滨县| 高安市| 同江市| 宕昌县| 河池市| 宁晋县| 杭锦后旗| 德化县| 金坛市| 淮南市| 焦作市| 凤凰县| 北宁市| 盐边县| 奈曼旗| 百色市| 开阳县| 芦溪县| 敦化市| 祥云县| 齐齐哈尔市| 松江区| 昭平县| 子长县| 宜阳县| 娄烦县| 密山市| 兴国县| 太仆寺旗| 水城县| 黄龙县| 泾源县| 凤台县| 太湖县|