项目作者: Guing

项目描述 :
vue-address-aync是一个异步的多级地址联动select组件。
高级语言: Vue
项目地址: git://github.com/Guing/vue-address-async.git
创建时间: 2018-08-30T06:40:55Z
项目社区:https://github.com/Guing/vue-address-async

开源协议:MIT License

下载


vue-address-async

简介

vue-address-aync是一个异步的多级地址联动select组件。select元素可以通过异步接口获取数据之后,实现多级联动,因此它不单单可用于多级的地址选择,还可以支持其他的异步多级select联动。

安装

安装包:

  1. # install it via npm
  2. npm install vue-address-async --save

引入组件:

  1. import VueAddressAsync from "vue-address-aync";
  2. //...
  3. components: {
  4. VueAddressAsync
  5. },
  6. //...

Props

Props 类型 默认值 描述
options Array [] 异步请求参数
value Array [] 绑定的省市区地址
responeData String "" 获取异步响应数据的格式
responeDataItem Object { name: "name", value: "value" } 异步响应数据中的key名,用于绑定option的name与value。
placeholder Array [] select的提示语

options

异步请求使用的是axios插件,options具体的请求参数配置,可以查看官方仓库
由于异步请求可能需要上一个select绑定的值作为请求参数,所以这里添加了一个特殊字符$lastValue
比如,在Get请求的params参数中,通过$lastValue可以获取上一个select绑定的值。

  1. options:[
  2. {
  3. url: "https://api.com/province", //获取省的接口
  4. },
  5. {
  6. url: "https://api.com/city",
  7. params: {
  8. parentId: "$lastValue" //获取城市,需要传父级省的ID,通过$lastValue获取。
  9. }
  10. }
  11. ]

value

通过v-mdoel可以绑定省市区地址,而且value的元素对应options的接口元素。

方法

getName

通过调用组件的getName方法,可以获取选中的详细地址名称。

事件

change

当点击改变select的值,会触发change事件,有两个参数(value,list)
value:绑定的地址列表。
list:地址列表数组。

示例

  1. <template>
  2. <div id="demo">
  3. <vue-address-async ref="vSelect" :placeholder="placeholder" :options="options" v-model="value" @change="handleChange" :respone-data="responeData" :respone-data-item="responeDataItem"></vue-address-async>
  4. <div class="btn-box">
  5. <button @click="getAddressName" class="btn">获取详细地址</button>
  6. {{addressName}}
  7. </div>
  8. </div>
  9. </template>
  1. // 引入组件
  2. import VueAddressAsync from "vue-address-aync";
  3. export default {
  4. name: "demo",
  5. components: {
  6. VueAddressAsync
  7. },
  8. data() {
  9. return {
  10. //异步请求参数,使用axios插件,具体参数可自行google。
  11. //(使用的是高德地图的API,访问次数有限,有条件可以使用自己的API)
  12. options: [
  13. {
  14. url: "https://restapi.amap.com/v3/config/district",
  15. params: { key: "9f05cf737e84708c4cfe5d9f02cddfce" }
  16. },
  17. {
  18. url: "https://restapi.amap.com/v3/config/district",
  19. params: {
  20. key: "9f05cf737e84708c4cfe5d9f02cddfce",
  21. keywords: "$lastValue" //$lastValue可以获取上一个select绑定的值
  22. }
  23. },
  24. {
  25. url: "https://restapi.amap.com/v3/config/district",
  26. params: {
  27. key: "9f05cf737e84708c4cfe5d9f02cddfce",
  28. keywords: "$lastValue"
  29. }
  30. },
  31. {
  32. url: "https://restapi.amap.com/v3/config/district",
  33. params: {
  34. key: "9f05cf737e84708c4cfe5d9f02cddfce",
  35. keywords: "$lastValue"
  36. }
  37. }
  38. ],
  39. //绑定的省市区地址
  40. value: ["", "", "", ""],
  41. //select的提示语
  42. placeholder: ["请选择省", "请选择市", "请选择区", "请选择街道"],
  43. //获取异步响应数据的格式。
  44. responeData: "districts[0].districts",
  45. //异步响应数据中,绑定到option的name与value的key。
  46. responeDataItem: { name: "name", value: "adcode" },
  47. //详细地址
  48. addressName: ""
  49. };
  50. },
  51. methods: {
  52. /**
  53. * 获取详细地址
  54. */
  55. getAddressName() {
  56. this.addressName = this.$refs.vSelect.getName();
  57. },
  58. /**
  59. * 改变事件
  60. */
  61. handleChange(value, list) {
  62. console.log(value);
  63. console.log(list);
  64. }
  65. }
  66. };

项目构建

  1. # 安装依赖
  2. npm install
  3. # 开发环境: localhost:8080
  4. npm run dev
  5. # 构建部署
  6. npm run build