## 级联选择器
web开发中我们经常会遇到级联选择器的问题,尤其是在表单中,无外乎几种情况:
* 单个级联 (下拉选择框,单选)
* 单个级联 (多项选择)
* 二级联动 (省份和城市联动)
* 三级联动 (省市区联动)
在jquery中有很多好用的插件,比如[select2](https://github.com/select2/select2), 单选,多选的功能都具备。
文中在vue中的实现级联选择器,自己在项目中碰到过以下两种情况的后端数据,查阅资料后也证实了这两种数据的合理性:
[在线预览](https://zhhshen.github.io/vue-zh/demo.html)
## 后端返回固定格式的数据
这种情况是**比较推荐**的,大量的数据运算放在后端来进行,只需前后端商量好数据格式即可
一般的数据格式可能如下:
```javascript
[{
value: 'beijing',
label: '北京',
children: [{
value: 'chaoyang',
label: '朝阳'
}, {
value: 'haidian',
label: '海淀'
}, {
value: 'changping',
label: '昌平'
}, {
value: 'shunyi',
label: '顺义'
}]
}, {
value: 'shanghai',
label: '上海',
children: [{
value: 'baoshan',
label: '宝山'
}, {
value: 'jiading',
label: '嘉定'
}, {
value: 'songjiang',
label: '松江'
}, {
value: 'pudong',
label: '浦东'
}]
}]
```
特点:数据之间层级嵌套,上下级的关系很清晰
## 前端自定义数据的格式
这种情况适合数据量较小的数据,或者由于某种原因后端只能返给你这种数据,那所有的数据处理就需要前端来操作,最终拼成的格式也与上述情况类似,只不过是多几个或少几个字段的问题。
数据格式可能会是这样:
```javascript
[{
code: 420000,
name: '湖北省',
parentCode: 0
},
{
code: 420100,
name: '武汉市',
parentCode: 420000
},
{
code: 420101,
name: '市辖区',
parentCode: 420100
},
{
code: 420102,
name: '江岸区',
parentCode: 420100
},
{
code: 420103,
name: '江汉区',
parentCode: 420100
},
{
code: 420104,
name: '硚口区',
parentCode: 420100
},
{
code: 420105,
name: '汉阳区',
parentCode: 420100
},
{
code: 421000,
name: '荆州市',
parentCode: 420000
},
{
code: 421001,
name: '市辖区',
parentCode: 421000
},
{
code: 421002,
name: '沙市区',
parentCode: 421000
},
{
code: 421003,
name: '荆州区',
parentCode: 421000
},
{
code: 430000,
name: '湖南省',
parentCode: 0
},
{
code: 430100,
name: '长沙市',
parentCode: 430000
},
{
code: 430101,
name: '市辖区',
parentCode: 430100
},
{
code: 430102,
name: '芙蓉区',
parentCode: 430100
},
{
code: 430103,
name: '天心区',
parentCode: 430100
},
{
code: 430104,
name: '岳麓区',
parentCode: 430100
}]
```
特点:数据格式是个平面表,每一条数据中都带有与之相对应的上下级关系。当我们查看某个数据的上下级时,都需要重新去遍历一遍数据。
#### 如何在组件中使用
```html
<div class="hello">
<form-organization :organization="organization" v-model="seleted"></form-organization>
</div>
<script>
import FormOrganization from '@/components/FormOrganization'
export default {
name: 'hello',
data () {
return {
seleted: [],
organization: [{
value: 'beijing',
label: '北京'
}, {
value: 'shanghai',
label: '上海'
}, {
value: 'shenzhen',
label: '深圳'
}, {
value: 'hangzhou',
label: '杭州'
}, {
value: 'zhengzhou',
label: '郑州'
}, {
value: 'guangzhou',
label: '广州'
}, {
value: 'xiamen',
label: '厦门'
}]
}
},
components: {
FormOrganization
}
}
</script>
```
## 组件API
| props | type | description |
| :-------------: |:-------------:| :-----:|
| origanization | Array | 级联数据源,格式必须按照第一种数据中的格式显示 |
| value | Array | 选中中或默认值,可以直接用v-model语法糖,具体可以查看例子 |
参考资料: [Web中树形数据(层级关系数据)的实现](http://blog.csdn.net/accountwcx/article/details/46851713)
没有合适的资源?快使用搜索试试~ 我知道了~
基于vue20实现的级联选择器
共74个文件
js:31个
vue:21个
md:5个
需积分: 29 24 下载量 135 浏览量
2019-08-12
02:49:16
上传
评论
收藏 597KB ZIP 举报
温馨提示
基于Vue的级联选择器,可以单项,二级, 三级级联,多级级联
资源推荐
资源详情
资源评论
收起资源包目录
基于vue20实现的级联选择器.zip (74个子文件)
vue-zh-master
.babelrc 234B
config
index.js 1KB
prod.env.js 48B
dev.env.js 139B
test.env.js 132B
docs
.nojekyll 0B
_sidebar.md 94B
index.html 721B
static
css
app.8dc2e510e14a887cab5d09bb2a0859a0.css 8KB
app.8dc2e510e14a887cab5d09bb2a0859a0.css.map 14KB
js
app.344d90f2e0f3b0836e08.js.map 157KB
manifest.22a3e5a2521022a6aa83.js.map 14KB
vendor.d2e2fb6937a897165d65.js 240KB
vendor.d2e2fb6937a897165d65.js.map 1.55MB
manifest.22a3e5a2521022a6aa83.js 1KB
app.344d90f2e0f3b0836e08.js 26KB
multiple.md 2KB
demo.html 456B
README.md 4KB
table.md 2KB
package.json 3KB
test
unit
.eslintrc 95B
index.js 487B
specs
Hello.spec.js 335B
karma.conf.js 992B
e2e
specs
test.js 561B
runner.js 1KB
nightwatch.conf.js 1KB
custom-assertions
elementCount.js 777B
index.html 203B
static
.gitkeep 0B
src
App.vue 549B
assets
less
base.less 2KB
api
index.js 2KB
views
Base
Side.vue 902B
Home.vue 542B
Content
Multiple.vue 728B
Date.vue 147B
Table.vue 2KB
Modal.vue 105B
Organization.vue 4KB
main.js 359B
components
Form
FormOrganization.vue 8KB
FormMultipleSelect.vue 9KB
Table
tableOld.vue 5KB
tableMultiple.vue 6KB
table.vue 9KB
EditUpload.vue 5KB
Chart
Sankey.vue 4KB
HighChart.vue 3KB
Subheader
index.vue 334B
Modal
Confirm.vue 2KB
Toast.vue 2KB
Dialog.vue 3KB
Pagination
index.vue 4KB
directives
tooltip.js 481B
index.js 61B
router
index.js 656B
.eslintrc.js 642B
.gitignore 132B
README.md 0B
.eslintignore 23B
.editorconfig 147B
build
dev-client.js 245B
utils.js 2KB
build.js 953B
webpack.prod.conf.js 4KB
check-versions.js 1KB
webpack.dev.conf.js 1KB
dev-server.js 2KB
webpack.test.conf.js 831B
webpack.base.conf.js 2KB
vue-loader.conf.js 307B
.postcssrc.js 196B
共 74 条
- 1
资源评论
普通网友
- 粉丝: 484
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功