Vue.js 三级联动

绝地灬酷狼 2021-09-19 11:16 562阅读 0赞

先上代码,后面有说明

  • html

  1. <select v-model="selectedCity" class="itxt" name="loginname" tabindex="1"
  2. style="width:120px;border: 1px solid #bdbdbd;float:right;height:38px;line-height:38px;">
  3. <option disabled selected="selected" :value="{code:-1}">市/区</option>
  4. <template v-for="city in cityList">
  5. <option :value="{code:city.id,name:city.nameCn,level:city.level}">
  6. {
  7. {city.nameCn}}
  8. </option>
  9. </template>
  10. </select>
  11. <select v-model="selectedDealer" class="itxt" name="loginname" tabindex="1"
  12. style="width:100%;float:right;height:38px;line-height:38px;">
  13. <option disabled selected="selected" :value="{code:-1}">请选择</option>
  14. <template v-for="dealer in dealerList">
  15. <option :value="{code:dealer.dealerCode,name:dealer.nameCn,addressCn:dealer.addressCn}">
  16. {
  17. {dealer.nameCn}}
  18. </option>
  19. </template>
  20. </select>
  • js

    var vm = new Vue({

    1. el: '#orderInfo',
    2. data: {
    3. orderInfo: {
    4. consignee: '',
    5. idCard: '',
    6. province: '',
    7. provinceCode: '',
    8. city: '',
    9. cityCode: '',
    10. dealerCode: '',
    11. dealerName: ''
    12. },
    13. selectedDealer: {code: -1},
    14. selectedProvince: {code: -1},
    15. selectedCity: {code: -1},
    16. provinceList: [],
    17. cityList: [],
    18. dealerList: []
    19. },
    20. methods: {
    21. submitOrder: function () {
    22. var _self = this;
    23. _self.orderInfo.provinceCode = _self.selectedProvince.code;
    24. _self.orderInfo.province = _self.selectedProvince.name;
    25. _self.orderInfo.cityCode = _self.selectedCity.code;
    26. _self.orderInfo.city = _self.selectedCity.name;
    27. _self.orderInfo.dealerCode = _self.selectedDealer.code;
    28. _self.orderInfo.dealerName = _self.selectedDealer.name;
    29. this.$http.post("/v1/api/order", _self.orderInfo).then(function (res) {
    30. alert(res.body.message);
    31. if (res.body.success) {
    32. location.href = '/pay/index?orderSn=' + res.body.data.orderSn;
    33. }
    34. }, this.httpError);
    35. }
    36. },
    37. watch: {
    38. selectedProvince: function (newVal, oldVal) {
    39. var _self = this;
    40. if (newVal && typeof newVal != "undefined") {
    41. $.get("/v1/api/dealer/city/" + newVal.code, function (data) {
    42. _self.cityList = data;
    43. _self.selectedCity = {code: -1};
    44. });
    45. }
    46. },
    47. selectedCity: function (newVal, oldVal) {
    48. var _self = this;
    49. if (newVal && typeof newVal != "undefined" && newVal.code != -1) {
    50. $.get("/v1/api/dealer/" + newVal.code + "?level=" + newVal.level, function (data) {
    51. _self.dealerList = data;
    52. })
    53. }
    54. _self.selectedDealer = {code: -1};
    55. }
    56. },
    57. created: function () {
    58. var _self = this;
    59. $.ajax({
    60. url: '/v1/api/dealer/province',
    61. type: "GET",
    62. dataType: 'json',
    63. async: false,
    64. contentType: "application/json; charset=utf-8",
    65. success: function (res) {
    66. _self.provinceList = res;
    67. }
    68. });
    69. }

    })

以上是省,市,经销商的三级联动

注意点主要:

  • create方法中的ajax调用是同步方法,异步调用页面加载后省的数据可能还没请求回来
  • $.get(),$.post()方式调用接口要引用vue-resource.js
  • v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。
  • 如果 v-model 表达式的初始值未能匹配任何选项,

发表评论

表情:
评论列表 (有 0 条评论,562人围观)

还没有评论,来说两句吧...

相关阅读

    相关 三级联动

    .set设置:ctrl+alt+s; 2.文本框在设置border-box之前边框向内设置 3.行内标签不能设置上下的margin(span) 4.json为...

    相关 Javascript实现三级联动

    三级联动:就是平时网页上需要选择的省市县对应位置的下拉栏模块,当选择好省位置后市的下拉栏更新为已选省的,县类似。 ![这里写图片描述][SouthEast] <!

    相关 WebForm 三级联动

    三级联动 数据库根据父级代号条件写查询 返回list<>集合 方法一: 创建三个下拉列表: ※AutoPostBack:否发生自动回传到服务器的操作。如果把该属性设置为