使用 Vue 实现多级连动效果,需要了解
v-model
- 属性绑定
:value
- change 事件处理
@change
- Ajax 请求
$.getJSON()
前端代码
当省变化时,清空所有市,县,乡的数据,然后请求市的数据
当市变化时,清空所有县,乡的数据,然后请求县的数据
当县变化时,清空所有乡的数据,然后请求乡的数据
1 |
|
请求响应数据格式
1 | [ |
数据库表结构
id | name | parent_id | level |
---|---|---|---|
1 | 北京市 | 0 | 1 |
2 | 天津市 | 0 | 1 |
3 | 河北省 | 0 | 1 |
37 | 东城区 | 1 | 2 |
38 | 西城区 | 1 | 2 |
987 | 大寺镇 | 65 | 3 |
省市县等的数据下载: area.sql
服务器端代码
服务器端使用 SpringMvc + MyBatis 实现
Area
1 | package com.xtuer.bean; |
AreaController
1 | package com.xtuer.controller; |
AreaMapper
1 | package com.xtuer.mapper; |
Area.xml
1 |
|
思考
上面的代码有问题没?
有,大大的有,服务器端和浏览器端都有优化的空间
- 服务器端: 上面的实现,每次数据都要从数据库里查询,并发量大的时候,由于数据库访问太多,系统的性能会急剧下降,甚至会导致系统不响应。观察地区数据的特点,他们是很少变化的,是不是可以先从缓存里读取,如果缓存里没有,再从数据库读取?可参考 Redis 集成
- 浏览器端: 例如先选择北京,加载北京下的数据,然后选择河北,加载河北下的数据,再选择北京,又向服务器请求加载北京的数据,发现向服务器请求了 2 次北京的数据,可以在浏览器端对请求到的数据缓存,同一个数据不要进行多次加载,在访问量很大的系统中,每一个小的优化都很关键