Vue------实现省市区三级联动

这篇具有很好参考价值的文章主要介绍了Vue------实现省市区三级联动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇将用,vue框架实现省市区三级联动

一、思路

三个下拉框,分别代表省、市、区

下面的任务就是,分别绑定 省、市、区三个下拉框:

点击省会出现所有的省份

点击对应的省份,市下拉框会对应出现对应的市

点击市会出现所有的市

点击对应的市,区下拉框会对应出现对应的区。

依次可以实现 省市区三级联动。

二、vue主体实现

如下面代码所示

<body>

<div id="app">


    <div>
        <span>省</span>
        <select v-model="pro">
            <option :value="p.adcode" v-for="p in list">{{p.name}}</option>
        </select>

        <span>市</span>
        <select v-model="city">
            <option :value="item.adcode" v-for="(item,index) in list.find(c=>c.adcode==pro).districts">
                {{item.name}}
            </option>
        </select>


        <span>区</span>
        <select v-model="county">
            <option :value="item.adcode"
                    v-for="(item,index) in list.find(c=>c.adcode==pro).districts.find(x=>x.adcode==city).districts">
                {{item.name}}
            </option>
        </select>


    </div>


</div>

<script>
    new Vue({
        el: "#app",
        data: {
            pro: "110000",
            city: "",
            county: "",
            list: citys
        },
    })

</script>
</body>

三、完善代码(联动)

要想实现省市区三级联动

对 省、市进行监控,对应的数据改变,就改变对应的省市县,以此来完成省市县三级联动

完善后的 Vue 如下

   new Vue({
        el: "#app",
        data: {
            pro: "110000",
            city: "",
            county: "",
            list: citys
        },
        methods: {
            loadCity(proCode) {
                let $citys = this.list.find(s => s.adcode == proCode).districts[0];
                if ($citys != null) {
                    this.city = $citys.adcode;
                }
            },
            loadCounty(proCode, cityCode) {
                let $county = this.list.find(s => s.adcode == proCode).districts.find(x => x.adcode == cityCode).districts[0];
                if ($county != null) {
                    this.county = $county.adcode;
                }
            }
        },
        created() {
            this.loadCity(this.pro);
            this.loadCounty(this.pro, this.city);
        },
        watch: {
            pro: function (newVal, oldVal) {
                this.loadCity(newVal);
            },
            city: function (newVal, oldVal) {
                this.loadCounty(this.pro, this.city);
            }
        },
    })

四、全部代码

html部分

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue.js"></script>
    <script src="../js/citys.js"></script>
    <script>
        console.log(citys)
    </script>
    <style>
        select{
            width: 188px;
            height: 20px;
            text-align: center;
            border-radius: 20px;
        }

    </style>

</head>
<body>

<div id="app">


    <div>
        <span>省</span>
        <select v-model="pro">
            <option :value="p.adcode" v-for="p in list">{{p.name}}</option>
        </select>

        <span>市</span>
        <select v-model="city">
            <option :value="item.adcode" v-for="(item,index) in list.find(c=>c.adcode==pro).districts">
                {{item.name}}
            </option>
        </select>


        <span>区</span>
        <select v-model="county">
            <option :value="item.adcode"
                    v-for="(item,index) in list.find(c=>c.adcode==pro).districts.find(x=>x.adcode==city).districts">
                {{item.name}}
            </option>
        </select>


    </div>


</div>

<script>
    new Vue({
        el: "#app",
        data: {
            pro: "110000",
            city: "",
            county: "",
            list: citys
        },
        methods: {
            loadCity(proCode) {
                let $citys = this.list.find(s => s.adcode == proCode).districts[0];
                if ($citys != null) {
                    this.city = $citys.adcode;
                }
            },
            loadCounty(proCode, cityCode) {
                let $county = this.list.find(s => s.adcode == proCode).districts.find(x => x.adcode == cityCode).districts[0];
                if ($county != null) {
                    this.county = $county.adcode;
                }
            }
        },
        created() {
            this.loadCity(this.pro);
            this.loadCounty(this.pro, this.city);
        },
        watch: {
            pro: function (newVal, oldVal) {
                this.loadCity(newVal);
            },
            city: function (newVal, oldVal) {
                this.loadCounty(this.pro, this.city);
            }
        },
    })

</script>
</body>
</html>

 js部分 ( 私聊作者获取 )文章来源地址https://www.toymoban.com/news/detail-423976.html


到了这里,关于Vue------实现省市区三级联动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包