当前位置: 首页 > article >正文

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

Area 省市区选择,省市区选择组件通常与 弹出层 组件配合使用。
areaList 格式
areaList 为对象结构,包含 province_list、city_list、county_list 三个 key。

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

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

1. 省市区数据引入

npm i @vant/area-data

安装后,使用@vant下面的路径无法引用成功
在这里插入图片描述
我们新建一个用来引入文件的文件夹node_Files,放在pages下面,把@vant中的 area-data 整个进行拷贝,把dist里面的index.cjs.js文件名改为data.js,index.d.ts文件名改为data.d.ts。
在这里插入图片描述
引入链接

//省市区数据引入使用
import {
  areaList
} from "../../pages/node_Files/area-data/dist/data";

2. 封装组件

在这里插入图片描述
address-option.wxml

<!--components/address-option.wxml-->
<van-field value="{{ fieldValue }}" readonly clearable input-align="{{inputAlign}}" label="{{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

// components/addressOption/addressOption.js
//省市区数据引入使用
import {
  areaList
} from "../../pages/node_Files/area-data/dist/data";

Component({
  /**
   * 组件的属性列表
   */
  properties: {
      label: {
        type: String,
        value: "地区"
      },
      inputAlign: {
        type: String,
        value: "left"
      },
      optionValue: {
          type: String,
          value: ""
      },
      mustFillIn: {
          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
          })
      }
  },
})

address-option.json

{
  "component": true,
  "usingComponents": {
    "van-field": "@vant/weapp/field/index",
    "van-action-sheet": "@vant/weapp/action-sheet/index",
    "van-area": "@vant/weapp/area/index"
  }
}

3. 页面使用省市区

3.1. 引入组件

address.json

"usingComponents": {
    "address-option": "/components/address-option/address-option"
  }

3.2. 调用组件

address.wxml

<address-option bind:addressTab="onAddress"></address-option>

3.3. 接收子组件传过来的值

address.js

Page({

  /**
   * 页面的初始数据
   */
  data: {
    radio: '1',
    fieldValue: ""
  },

  onAddress(e){
    this.setData({
      fieldValue: e.detail
    })
  },
})

http://www.kler.cn/a/452265.html

相关文章:

  • Python数据处理——re库与pydantic的使用总结与实战,处理采集到的思科ASA防火墙设备信息
  • CSS系列(36)-- Containment详解
  • 微软edge浏览器 v131.0.2903.99便携版
  • 智驾感知「大破局」!新一轮混战开启
  • Kubernetes(k8s)离线部署DolphinScheduler3.2.2
  • x86_64 Ubuntu 编译安装英伟达GPU版本的OpenCV
  • ESLint (10)
  • 低空经济的地理信息支撑:构建安全、高效的飞行管理体系
  • CSS|15 CSS3结构伪类border-collapse伪元素
  • PHP 微信棋牌开发全解析:高级教程
  • 解决Ascend上vllm运行时出现urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]
  • redis和mysql的区别
  • 威尔克斯(Wilks)分布
  • 基于Pycharm与数据库的新闻管理系统(3)MongoDB
  • shell拓展知识
  • React State(状态)
  • Qt实现Android的图案密码(图形解锁)源码分享
  • 计算机的错误计算(一百九十一)
  • 信息抽取(NLP)是什么技术有哪些应用?
  • 大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入
  • 《Web 搜索引擎优化》
  • CI/CD在前端项目的应用:实现自动化与持续交付
  • Go入门篇:(二)基础知识之结构,包,变量初探
  • my-sql编写技巧
  • 阿里云虚拟主机ecs镜像如何转移到本地virtualbox上
  • CH32V307VCT6---工程template创建