Vue组件省市区三级联动

npm安装

bash 复制代码
npm install element-china-area-data -S

vue组件

复制代码
创建addressCascader.vue文件

参数:

size: medium / small / mini

parameters: code/name(此处选中事件之后会将code、name都传)

bash 复制代码
<template>
    <div>
        <el-cascader :size="size" :options="options" v-model="provinces" @change="dynamicHandleChange" :placeholder="placeholder"
                     :parameters="parameters"></el-cascader>
    </div>
</template>

<script>
    export default {
        name: "addressCascader",
        props: {
            size: {
                type: String,
                default: "small", // 默认大小为small
            },
            options: {
                type: Array,
                default: () => [], // 默认选项数据为空数组
            },
            placeholder: {
                type: String,
                default: "请选择省市区", // 默认提示文字为"请选择省市区"
            },
            parameters: {
                type: String,
                default: "code", // 默认为code值
            },
            selectValue: {
                type: String,
                default: "",
            },
        },
        data() {
            return {
                provinces: [], // 选中的省市区数据,默认为空数组
            };
        },
        watch: {
            selectValue: {
                handler(newValue) {
                    // 确保选择框中的值已经更新完成
                    this.$nextTick(() => {
                        this.provinces = newValue.split("/");
                    });
                },
                immediate: true,
            },
        },
        methods: {
            dynamicHandleChange(e) {
                //此处可根据parameters区分code/name
                this.$emit("change", this.figure(e),this.ideograph(e));
            },
            // 传递中文数据
            ideograph(code) {
                const areas = [];
                if (Array.isArray(code) && code.length) {
                    let region = this.options;
                    for (let i = 0; i < code.length; i++) {
                        const item = code[i];
                        const found = region.find((regionItem) => regionItem.value === item);
                        if (found) {
                            areas.push(found.label); // 直接将中文推入数组中
                            region = found.children || [];
                            if (i === code.length - 1) {
                                // 最后一个区域,可以打印或进行其他处理
                            }
                        } else {
                            break;
                        }
                    }
                }
                return areas.join("/");
            },
            // 传递code数据
            figure(code) {
                return code.join("/");
            },
        },
    };
</script>

引用

bash 复制代码
<template>
  <div>
    <cascader-component :selectValue="addr_code" :size="'medium'" :parameters="'code'" :options="regionData" :placeholder="'请选择城市'" @change="customChangeHandler">
    </cascader-component>
  </div>
</template>
<script>
import { regionData } from "element-china-area-data";
export default {
  data() {
    return {
      regionData: regionData,
      addr_code:''
    };
  },
  methods: {
    customChangeHandler(code,name) {
      this.addr_code = code
    },
  },
};
</script>
相关推荐
科技探秘人4 分钟前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人4 分钟前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
JerryXZR10 分钟前
前端开发中ES6的技术细节二
前端·javascript·es6
七星静香11 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
q24985969314 分钟前
前端预览word、excel、ppt
前端·word·excel
小华同学ai20 分钟前
wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器
前端·钉钉·飞书
problc24 分钟前
Flutter中文字体设置指南:打造个性化的应用体验
android·javascript·flutter
Gavin_91528 分钟前
【JavaScript】模块化开发
前端·javascript·vue.js
懒大王爱吃狼2 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
待磨的钝刨3 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json