vue移动端项目vant组件库之cascader级联选择

vue vant 级联选择

<template>
  <div>
    <van-field
      v-model="fieldValue"
      is-link
      readonly
      label="地区"
      placeholder="请选择所在地区"
      @click="show = true"
    />
    <van-popup v-model="show" round position="bottom">
      <van-cascader
        v-model="cascaderValue"
        title="请选择所在地区"
        :options="options"
        @close="show = false"
        @finish="onFinish"
      />
    </van-popup>
  </div>
</template>

<script>
import { Cascader, Popup, Field } from "vant";
export default {
  components: {
    vanCascader: Cascader,
    vanPopup: Popup,
    vanField: Field,
  },
  data() {
    return {
      show: false,
      fieldValue: "",
      cascaderValue: "",
      // 选项列表,children 代表子选项,支持多级嵌套
      options: [
        {
          text: "广东省",
          value: "1",
          children: [
            { 
                text: "深圳市", 
                value: "101",  
                children: [
                    { text: "南山区", value: "10101" },
                    { text: "宝安区", value: "10102" },
                    { text: "龙华区", value: "10103" },
                    { text: "福田区", value: "10104" },
                ]
            },
            { text: "广州市", value: "102" },
            { text: "珠海市", value: "103" },
          ],
        },
        {
          text: "广西壮族自治区",
          value: "2",
          children: [
            { text: "南宁市", value: "201" },
            { text: "北海市", value: "202" },
            { text: "桂林市", value: "203" },
          ],
        },
      ],
    };
  },
  methods: {
    // 全部选项选择完毕后,会触发 finish 事件
    onFinish({ selectedOptions }) {
      // 没有 children 时触发
      this.show = false;
      this.fieldValue = selectedOptions.map((option) => option.text).join("/");
    },
  },
};
</script>

<style lang="scss" scoped>
</style>

效果

在这里插入图片描述

没有子项时自动完成

在 onFinish 回调中处理相应逻辑

要实现这个功能,可以使用 Vant 4.x 中的 Cascader 级联选择组件。在 Cascader 中,可以通过配置 options 属性来设置级联数据源,然后通过配置 value 属性来获取用户选择的数据。同时,Cascader 还提供了 slot 来自定义显示内容,可以根据自己的需求来进行定制。 对于多选,可以使用 Vant 4.x 中的 Checkbox 复选框组件。在 Cascader 中,可以通过配置 show-checkbox 属性来开启多选模式,然后通过配置 checked-options 属性来获取用户选择的数据。 下面是一个简单的示例代码: ```html <van-cascader :options="options" :value="value" :show-checkbox="true" :checked-options="checkedOptions" @change="handleChange" > <template #title="{option}"> <van-checkbox v-model="option.checked">{{ option.label }}</van-checkbox> </template> </van-cascader> ``` ```javascript export default { data() { return { options: [ { value: 'beijing', label: '北京', children: [ { value: 'haidian', label: '海淀区', }, { value: 'chaoyang', label: '朝阳区', }, ], }, { value: 'shanghai', label: '上海', children: [ { value: 'pudong', label: '浦东新区', }, { value: 'minhang', label: '闵行区', }, ], }, ], value: [], checkedOptions: [], }; }, methods: { handleChange(value, selectedOptions, checkedOptions) { this.value = value; this.checkedOptions = checkedOptions; }, }, }; ``` 在上面的代码中,我们通过配置 options 属性来设置级联数据源,通过配置 value 和 checkedOptions 属性来获取用户选择的数据。同时,我们使用了 slot 来自定义级联选择器的显示内容,将每个选项的 label 和 checkbox 组合在一起。最后,我们监听了 Cascader 的 change 事件,在事件处理函数中更新 value 和 checkedOptions 的值。 希望这个示例代码能够帮助到你。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值