欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

下面是一個(gè)示例代碼:

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

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

在這個(gè)示例中:

options 數(shù)組包含了級(jí)聯(lián)選擇器的數(shù)據(jù)源,其中每個(gè)對(duì)象表示一個(gè)選項(xiàng),包括 value、labelchildren 屬性。

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

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

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

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

import arrayTreeFilter from 'array-tree-filter'

/*
* 雙層遞歸逆向查找某一節(jié)點(diǎn)的所有父級(jí)
* */
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] : []
}

/*
* 該組件主要是通過(guò)后端傳入的節(jié)點(diǎn)值來(lái)實(shí)現(xiàn)級(jí)聯(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)級(jí)聯(lián)選擇器變化時(shí)候會(huì)觸發(fā)該事件
    * 向父級(jí)傳遞change事件來(lái)返回選中的節(jié)點(diǎn)id
    * 向父級(jí)傳遞realChange事件來(lái)返回選中的節(jié)點(diǎn)及其所有父節(jié)點(diǎn)和選中的所有l(wèi)abel的值
    * arrayTreeFilter 第三方庫(kù)用于篩查出選中的節(jié)點(diǎn)及其父節(jié)點(diǎn)
    * */
    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: '請(qǐng)選擇',
        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é)

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

相關(guān)文章

  • MAC+PyCharm+Flask+Vue.js搭建系統(tǒng)

    MAC+PyCharm+Flask+Vue.js搭建系統(tǒng)

    最近新做了個(gè)項(xiàng)目,使用的是MAC+PyCharm+Flask+Vue.js搭建系統(tǒng),本文就來(lái)分享一下搭建步驟,感興趣的可以了解一下
    2021-05-05
  • 集成vue到j(luò)query/bootstrap項(xiàng)目的方法

    集成vue到j(luò)query/bootstrap項(xiàng)目的方法

    下面小編就為大家分享一篇集成vue到j(luò)query/bootstrap項(xiàng)目的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • vue指令防止按鈕連點(diǎn)解析

    vue指令防止按鈕連點(diǎn)解析

    這篇文章主要介紹了vue指令防止按鈕連點(diǎn)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue實(shí)現(xiàn)漸變色進(jìn)度條的代碼

    Vue實(shí)現(xiàn)漸變色進(jìn)度條的代碼

    這篇文章主要介紹了Vue實(shí)現(xiàn)漸變色進(jìn)度條的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue-cli 2.*中導(dǎo)入公共less文件的方法步驟

    vue-cli 2.*中導(dǎo)入公共less文件的方法步驟

    這篇文章主要介紹了vue-cli 2.*中導(dǎo)入公共less文件的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 利用Vue.js+Node.js+MongoDB實(shí)現(xiàn)一個(gè)博客系統(tǒng)(附源碼)

    利用Vue.js+Node.js+MongoDB實(shí)現(xiàn)一個(gè)博客系統(tǒng)(附源碼)

    本文主要介紹了利用Vue.js+Node.js+MongoDB實(shí)現(xiàn)一個(gè)博客系統(tǒng),這個(gè)博客使用Vue做前端框架,Node+express做后端,數(shù)據(jù)庫(kù)使用的是MongoDB。實(shí)現(xiàn)了用戶注冊(cè)、用戶登錄、博客管理、文章編輯、標(biāo)簽分類(lèi)等功能,需要的朋友可以參考學(xué)習(xí)。
    2017-04-04
  • vue excel上傳預(yù)覽和table內(nèi)容下載到excel文件中

    vue excel上傳預(yù)覽和table內(nèi)容下載到excel文件中

    這篇文章主要介紹了vue excel上傳預(yù)覽和table內(nèi)容下載到excel文件中,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • vue中的v-if和v-show的區(qū)別詳解

    vue中的v-if和v-show的區(qū)別詳解

    這篇文章主要介紹了vue中的v-if和v-show的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • vue事件監(jiān)聽(tīng)函數(shù)on中的this指針域使用

    vue事件監(jiān)聽(tīng)函數(shù)on中的this指針域使用

    這篇文章主要介紹了vue事件監(jiān)聽(tīng)函數(shù)on中的this指針域使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue源碼探究之虛擬節(jié)點(diǎn)的實(shí)現(xiàn)

    Vue源碼探究之虛擬節(jié)點(diǎn)的實(shí)現(xiàn)

    這篇文章主要介紹了Vue源碼探究之虛擬節(jié)點(diǎn)的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04

最新評(píng)論