# Element UI 如何實現級聯選擇器
## 一、什么是級聯選擇器
級聯選擇器(Cascader)是一種常見的表單控件,用于處理具有層級關系的數據選擇場景。例如:
- 省市區三級聯動選擇
- 商品分類多級選擇
- 組織架構層級選擇
Element UI 提供的 `el-cascader` 組件可以優雅地實現這類需求,支持單選、多選、動態加載等多種模式。
## 二、基礎用法實現
### 1. 安裝與引入
首先確保已安裝 Element UI:
```bash
npm install element-ui -S
在項目中引入組件:
import { Cascader } from 'element-ui'
Vue.use(Cascader)
級聯選擇器需要特定格式的數組數據:
options: [{
value: 'jiangsu',
label: '江蘇省',
children: [{
value: 'nanjing',
label: '南京市',
children: [{
value: 'xuanwu',
label: '玄武區'
}]
}]
}]
<template>
<el-cascader
v-model="selectedOptions"
:options="options"
@change="handleChange">
</el-cascader>
</template>
<script>
export default {
data() {
return {
selectedOptions: [],
options: [...] // 上述數據結構
}
},
methods: {
handleChange(value) {
console.log('選中值:', value)
}
}
}
</script>
通過 size
屬性控制:
<el-cascader size="large"></el-cascader>
<el-cascader size="small"></el-cascader>
<el-cascader :disabled="true"></el-cascader>
<el-cascader clearable></el-cascader>
<el-cascader :show-all-levels="false"></el-cascader>
通過 lazy
屬性和 lazyLoad
方法實現:
<el-cascader
:props="props"
lazy
></el-cascader>
<script>
export default {
data() {
return {
props: {
lazy: true,
lazyLoad(node, resolve) {
// 按需加載數據
setTimeout(() => {
resolve([
{ value: 1, label: '一級選項' }
])
}, 1000)
}
}
}
}
}
</script>
<el-cascader
:props="{ multiple: true }"
></el-cascader>
通過 scoped slot
實現:
<el-cascader :options="options">
<template #default="{ node, data }">
<span>{{ data.label }}</span>
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
</template>
</el-cascader>
// 使用china-area-data插件
import { province, city, area } from 'china-area-data'
export default {
data() {
return {
options: province.map(prov => ({
value: prov.value,
label: prov.label,
children: city[prov.value].map(c => ({
value: c.value,
label: c.label,
children: area[c.value]
}))
}))
}
}
}
// 假設從API獲取數據
async created() {
const res = await axios.get('/api/categories')
this.options = this.formatTree(res.data)
},
methods: {
formatTree(data) {
// 轉換樹形結構邏輯...
}
}
使用 this.$set
或重新賦值整個數組:
this.$set(this.options, 0, newData)
// 或
this.options = [...newOptions]
結合 el-form
的校驗:
rules: {
region: [
{
validator: (rule, value, callback) => {
if (!value.length) {
callback(new Error('請選擇地區'))
} else {
callback()
}
}
}
]
}
lazy
加載filterable
實現搜索過濾v-once
Element UI 的級聯選擇器通過簡潔的 API 提供了強大的功能: 1. 支持靜態數據和動態加載 2. 提供單選、多選等多種模式 3. 高度可定制的UI和交互 4. 完善的文檔和社區支持
通過合理配置,可以滿足絕大多數層級數據選擇場景的需求。對于更復雜的場景,可以結合 Vue 的插槽機制和自定義渲染實現特殊需求。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。