微信小程序 基于Vant Weapp UI 组件库的Area 省市区选择

Area 省市区选择,省市区选择组件通常与 弹出层 组件配合使用。

areaList 格式

areaList 为对象结构,包含 province_listcity_listcounty_list 三个 key。

每项以地区码作为 key,省市区名字作为 value。地区码为 6 位数字,前两位代表省份,中间两位代表城市,后两位代表区县,以 0 补足 6 位。比如北京的地区码为 11,以 0 补足 6 位,为 110000

Vant 官方提供了一份默认的省市区数据,可以通过 @vant/area-data 引入。我的是node.js

复制代码
npm i @vant/area-data

安装后,打开node_modules将会看到,按官方的是无法成功引用的

我们新建一个用来引入文件的文件夹node_File(名字可以自己定),把@vant中的 area-data 整个进行拷贝,把dist里面的index.cjs.js文件名改为data.js

我的放在了pages下面,引入链接

java 复制代码
import {
    areaList
  } from "../../pages/node_File/area-data/dist/data";
  

因为我好几个地方需要用到,所以直接封装为组件使用

addressOption.wxml

html 复制代码
<van-field value="{{ fieldValue }}" readonly clearable input-align="right" label="地区" placeholder="请选择地区" bind:tap="onClick" required is-link />
<van-action-sheet show="{{ show }}">
    <van-area area-list="{{ areaList }}" title="地区选择" bind:confirm="onConfirm" bind:cancel="onClose" />
</van-action-sheet>

addressOption.js

javascript 复制代码
// components/addressOption/addressOption.js
//省市区数据引入使用
import {
    areaList
  } from "../../pages/node_File/area-data/dist/data";
  
Component({
    /**
     * 组件的属性列表
     */
    properties: {
        optionValue: {
            type: String,
            value: ""
        },
        mustfFillIn: {
            type: String,
            value: false
        }
    },

    /**
     * 组件的初始数据
     */
    data: {
        areaList,
        show:false
    },

    /**
     * 组件的方法列表
     */
    methods: {
        onClick() {
            this.setData({
                show: true,
            });
        },

        onConfirm(e){
            console.log("确定省市区:",e)
            var address=""
            e.detail.values.forEach(element => {
                address=address+element.name
            });
            this.setData({
                address: address,
                show: false,
            })
            this.handleTap()
            console.log("省市区为:",address)
            
        },

        handleTap() {
            let value = this.data.address
            console.log("fieldValue 地址:", value)
            this.triggerEvent("addressTab", value)
        },

        onClose() {
            this.setData({
                show: false,
            });
        },

    },
    observers: {
        optionValue: function (e) {
            this.setData({
                fieldValue: e
            })
        }
    },
})

页面使用省市区

引入组件 addressEedit.json

javascript 复制代码
{
    "usingComponents": {
        "address-option":"/components/addressOption/addressOption"
    }
}

addressEedit.wxss

javascript 复制代码
<view>
    <van-cell-group>
        <van-field model:value="{{ addressee }}" maxlength="8" clearable input-align="right" label="收件人" placeholder="请填写收件人" required is-link />
        <van-field model:value="{{ phone_number }}" maxlength="11" type="number" clearable input-align="right" label="手机号" placeholder="请填写手机号" required is-link />
        <address-option mustfFillIn="true" optionValue="{{delivery_address}}" bind:addressTab="onAddress"></address-option>
        <van-field model:value="{{ detailed_address }}" maxlength="10" clearable input-align="right" label="详细地址" placeholder="小区门牌号 例如 10栋101室" required is-link />
    </van-cell-group>

    <van-goods-action>
        <van-goods-action-button color="#fde753" text="保存地址" />
    </van-goods-action>
</view>

addressEedit.js

javascript 复制代码
Page({

    /**
     * 页面的初始数据
     */
    data: {
        show:false,
        delivery_address:"",
        addressee:"",
        phone_number:"",
        detailed_address:""
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {

    },

    onAddress(e){
        this.setData({
            delivery_address:e.detail
        })

    },

})

组件addressOption无法找到,在app.json引入组件

javascript 复制代码
"pages": [
        "components/addressOption/addressOption"
    ],

使用效果

相关推荐
00后程序员张1 小时前
iOS 性能优化的体系化方法论 从启动速度到渲染链路的多工具协同优化
android·ios·性能优化·小程序·uni-app·iphone·webview
游戏开发爱好者82 小时前
iPhone重启日志深度解析与故障代码诊断
android·ios·小程序·https·uni-app·iphone·webview
小白每天学一点2 小时前
微信小程序开发学习-8
javascript·css·微信小程序·小程序·html
2501_9160088911 小时前
手机抓包app大全:无需root的安卓抓包软件列表
android·ios·智能手机·小程序·uni-app·iphone·webview
低代码布道师14 小时前
医疗小程序10预约挂号日历切换
低代码·小程序
一 乐15 小时前
健康打卡|健康管理|基于java+vue+的学生健康打卡系统设计与实现(源码+数据库+文档)
android·java·数据库·vue.js·spring boot·微信小程序
翼龙云_cloud1 天前
阿里云渠道商:如何在阿里云 ECS 上搭建微信小程序服务?
运维·服务器·阿里云·微信小程序·小程序·云计算
墨着染霜华1 天前
UniApp 微信小程序分享
微信小程序·uni-app
2501_915921431 天前
Windows 系统下的 IPA 加密工具实战指南,如何在非 macOS 环境完成 IPA 混淆、加固与工程化处理
android·windows·macos·ios·小程序·uni-app·iphone
小小王app小程序开发1 天前
从 0 到 1 搭建盈利闭环:废品回收小程序的场景分层与增值服务设计
小程序