微信小程序 基于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"
    ],

使用效果

相关推荐
2501_915909069 小时前
iOS 应用反调试技详解术 检测调试器的原理与防护实践
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张13 小时前
iOS加固技术路线全面解析:Bitcode模式、源码模式与汇编模式对比及爱加密优势
android·汇编·ios·小程序·uni-app·cocoa·iphone
海纳百川·纳海川13 小时前
租房行业数字化:换个思路解决“老问题”
大数据·微信小程序·小程序
上海云盾-小余1 天前
CC 高频请求 + DDoS 流量攻击实战防御:全链路 WAF 流量清洗部署完整流程
网络·爬虫·安全·小程序·ddos
2501_916008891 天前
iOS IPA文件反编译与打包操作方法,拆包分析防护和加固打包
android·macos·ios·小程序·uni-app·cocoa·iphone
2301_810313181 天前
海外教育APP定制发展现状与开发选型核心要点解析
小程序·团队开发·软件需求
2501_915921431 天前
iOS手游安全反外挂解决方案:基于Xcode的加固混淆特色详解
android·安全·ios·小程序·uni-app·iphone·xcode
禾高网络2 天前
回收小程序在环保和商业领域发挥更大的作用
java·大数据·人工智能·小程序
2501_916007472 天前
iOS App分发教程 App Store、TestFlight 与 Ad Hoc 的配置与上传方法
android·ios·小程序·https·uni-app·iphone·webview
JasonMa1532 天前
从零搭建一个微信小程序活动管理平台(一):架构设计与技术选型
javascript·微信小程序·node.js