Vant Cascader 级联选择使用 wx小程序

这篇具有很好参考价值的文章主要介绍了Vant Cascader 级联选择使用 wx小程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用vant 级联选择的主要流程就是根据options的值进行使用,如果需要自定义可以把从api获得的信息通过算法进行处理处理成options的样式就可以使用了 。

首先就是先会在微信小程序中使用vant的组件这里直接引用不做过多的介绍,

<!-- 提示:vant组件给的样式,可以根据需求更改 -->
<view style="height:30rpx;"></view>
<view>
  <van-field value="{{ fieldValue }}" is-link readonly label="选择门锁" placeholder="请选择楼宇-房间号" bind:tap="onClick1" style="font-weight: 700;" />
  <van-popup show="{{ show }}" round position="bottom">
    <van-cascader wx:if="{{ show }}" value="{{ cascaderValue }}" title="请选择所在地区" options="{{ options }}" active-color="#d7000f" bind:close="onClose1" bind:change="onChangeFiled" bind:finish="onFinish1" />
  </van-popup>
</view>

之后我们观察这个组件是由 vant-field 和 vant-cascader 共同完成实现的。根据参数show:true/false来 确定是否显示 cascader组件,cascaderValue是用最后用于获得的结果,可以根据自己的需求使用。参数options是我们这里最重要的信息,就是展示复联框里面的内容。vant给出的options的固定样式,参数的格式应该是不能修改的,但是vant官方给出了修改,里面的字段是可以修改的。

Vant Cascader 级联选择使用 wx小程序
options = [
  {
    text: '浙江省',
    value: '330000',
    children: [{ text: '杭州市', value: '330100' }],
  },
  {
    text: '江苏省',
    value: '320000',
    children: [{ text: '南京市', value: '320100' }],
  },
];

下面是做的微信小程序demo的一个小展示。文章来源地址https://www.toymoban.com/news/detail-504612.html

//微信小程序data中定义的数据
data:{
    value: '',
    show: false,
    //options 中给的null字段是为了防止我们请求时没有数据造成的,组件原始数据展示出来的bug
    options: [{
          text: 'null',
          value: '',
          children: [],
        }],
    cascaderValue: "",
    myRoomid:'',
    myRoominfo:''
}

// 复联框
  onClick1() {
    this.setData({
      show: true,
    });
  },

  onClose1() {
    this.setData({
      show: false,
    });
  },
// vant 给出的函数用于,监听复联框组件结束的事件
 onFinish1(e) {
    const { selectedOptions, value } = e.detail;
    const fieldValue = selectedOptions
        .map((option) => option.text || option.name)
        .join('-');
    const myPlace = selectedOptions.map((option) => option.text)
    // 我现在需要匹配一下id
    //查找对应的函数
    this.setData({
      myPlace,
      fieldValue,
      cascaderValue: value,
    })
    console.log("我的楼宇",this.data.myPlace);
    console.log("我的房间信息",this.data.myRoominfo);
    let array = this.data.myRoominfo
    //查找对应的函数
    const myList = array.find(function(array,index,arrs){
      return array.building == myPlace[0] && array.name == myPlace[1]
    })
    console.log("过滤",myList);
    this.setData({
      roomId:myList.id,
      checked1: myList.lock1Status == 1 ? false:true,
      checked:myList.lock1Status == 1 ? false:true
    })
    console.log("roomid",this.data.roomId);
    this.setData({
      show:false
    })
  },

//在微信小程序加载的时候通过 api获得数据,并且为了迎合vant组件的样式写的笨拙的算法,求大佬修改一下!
onLoad(options) {
    //wx小程序自带的请求api
    wx.request({
      url: 'http://localhost:8000/room/myRoom',
      method: 'GET',
      header: {
        "Content-Type": "application/x-www-form-urlencoded",
          //这个数据是通过用户唯一的标识符id所获取的
        "token": wx.getStorageSync('token'),
      },
      success: (res) => {
        console.log("data:", res);
        // 把我的所有房间的参数拿到
        this.setData({
          myRoominfo:res.data.data
        })
        //开始使用笨拙的算法处理vant组件所需要的options参数的样式
        let array = res.data.data 
        // 转接数组,这里定义了一个和options相似的变量 myoptions方便对options直接赋值    
        //因为wx小程序的this.setdata({})对数组对象的单独赋值有些困难
        var myOptions = [{
          text: '浙江省',
          value: '330000',
          children: [],
        }]
/*
api获得的数据样式:
0: {building: "信息中心", createTime: "2023-02-27 15:51:52", deviceName: "Room204", deviceType: "有线", door1Status: "1", …}
1: {building: "信息中心", createTime: "2023-02-28 21:01:46", deviceName: "Room208", deviceType: "4G", door1Status: "1", …}
2: {building: "科技大楼", createTime: "2023-02-28 22:38:56", deviceName: "Building413", deviceType: "4G", door1Status: "1", …}


*/
        for (var i = 0; i < array.length; i++) {
          var unique = true;
          if (i == 0) {
            myOptions[i].text = array[i].building
            myOptions[i].value = i
            myOptions[i].children.push({ text: `${array[i].name}`, value: i })
            continue;
          }
          for (var idx = 0; idx < myOptions.length; idx++) {
            if (myOptions[idx].text == array[i].building) {
              myOptions[idx].children.push({ text: `${array[i].name}`, value: i })
              unique = false;
              continue;
            }
          }
          if (unique) {
            myOptions.push({
              text: `${array[i].building}`,
              value: i,
              children: [{ text: `${array[i].name}`, value: i }],
            })
          }
        }
        this.setData({
          options:myOptions
        })
        console.log("options",myOptions);
      }
    })
  },

//数据处理后的样式 最后只要把这个值传给options就可以了 复联框就可以正常使用
/*0:
children: Array(2)
0: {text: "204", value: 0}
1: {text: "208", value: 1}
length: 2
nv_length: (...)
__proto__: Array(0)
text: "信息中心"
value: 0
__proto__: Object
1:
children: Array(1)
0: {text: "413", value: 2}
length: 1
nv_length: (...)
__proto__: Array(0)
text: "科技大楼"
value: 2*/
Vant Cascader 级联选择使用 wx小程序

到了这里,关于Vant Cascader 级联选择使用 wx小程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • el-cascader级联选择器那些事

    vue3+element-plus+ts 使用cascader组件提供的getCheckedNodes()

    2024年02月16日
    浏览(34)
  • antd中的Cascader级联选择框怎么清空重置React

    React项目,使用antd中的 Cascader 级联选择框 通过其他按钮 无法重置 选择框中的项 1、级联选择框的数据默认是根据options绑定的数组中的value值来进行赋值显示的,可以使用antd中Cascader的value和onChange来进行赋值和更改 注:value选中项是一个数组  2、具体的搜索模块,直接使用

    2024年02月15日
    浏览(34)
  • Element-ui(Cascader 级联选择器)实现三级联动

    市区表: 县区表: 省级表: Controller层: service层 serviceimpl实现 mapper层实现 映射省下面所有的市 映射市下面所有的县 查询所有的区县 对应的省JavaBean 对应市JavaBean 对应的县区JavaBean 级联选择器 方法: 注意:级联选择器需要保持和后端映射保持一致回显数据 element-ui官网级

    2024年02月11日
    浏览(53)
  • element ui cascader级联选择器 动态加载以及回显

    当数据比较多的时候,一次性获取全部数据速度太慢,而且体验不太好,所有需要用到懒加载,一级一级的选择数据就能很好避免速度慢的问题。 以及我们使用el-cascader加载默认值的时候,cascader的输入框和联级选择框都会遇到的回显问题。看代码!!! 参数说明: value / v-model 选中

    2024年02月15日
    浏览(49)
  • vue+element Cascader 级联选择器 > 实现省市区三级联动

    看完我们就开始啦 完美(实现后别忘记动动小手点个赞哦~) 请安装指定版本的element-china-area-data(5.0.2),否则可能会导致报错:CodeToText为undefined(我就遇到了(嘘),要注意哦~) ↩︎

    2024年02月16日
    浏览(43)
  • element ui 中 Cascader 级联选择器实现 动态加载 动态禁用 入门

    实现效果 当点击的 根选项 有 子选项 时,会向后台发送请求,并且接收数据实现动态加载。 点击特殊选项时,可以禁用其他选项。 相关代码 props prop handleClassOrStudentChange

    2024年02月11日
    浏览(29)
  • Ant的 select选择器和Cascader 级联选择器下拉选框随着页面滑动样式脱离

     在select标签和cascader标签里添加  :getPopupContainer=\\\"(triggerNode:any) = (triggerNode.parentElement)\\\" 即可  

    2024年02月15日
    浏览(30)
  • vue element UI el-cascader 级联选择器 获取当前选择值的整个对象

    要使用到cascader组件选中的数据的所有部分,并没有类似于select组件中的value可以指定,查看官方文档提供了新的方法,官方地址https://element.eleme.cn/#/zh-CN/component/cascader html部分 可以正常获取到该节点的全部数据,如下图所示: 如有问题请联系我~ 欢迎加入QQ群:

    2024年02月15日
    浏览(36)
  • element-ui cascader级联选择器,获取对象Object(getCheckedNodes()、currentLabels)

    element-ui中的cascader级联选择器,官网文档中并没有提供方法直接获取当前选择的Object,这里特别需要注意element-ui的版本问题,不同的版本需要用到不同的方法。 可以用this.$refs[‘cascader’].currentLabels获取选中节点。 //获取节点label内容 因为安装的element-ui版本高于2.7.0版本,所

    2024年02月16日
    浏览(29)
  • antd级联选择器(a-cascader)动态加载和动态回显效果实现

    ​ 需要实现级联选择器动态拿到每一层级的数据并显示,同时在编辑数据时弹框回显对应的层级关系。 ​ 给组件添加 :checkStrictly=\\\"true\\\" 这个属性就可以实现单独勾选一级、二级、三级组织关系。(官方api没有写) ​ 首先先在html里 模态框上写上a-cascader组件 ​ 先实现只有动

    2024年01月25日
    浏览(25)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包