小程序使用Vant Weapp写的地址列表Address-List

本文档介绍了如何利用Vant组件库中的van-swipe-cell、van-cell、van-dialog等构建一个可滑动删除的地址列表。通过自定义样式和事件处理,实现了地址的显示、编辑和删除功能,同时也展示了如何处理滑动单元格可能出现的渲染错误。此外,还强调了在使用组件时可能需要自定义CSS以达到预期效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近想用Vant练习写一个项目,看到了文档中有AddressList这样一个组件,我们在做商城等项目时会经常使用到,但没有找到可以直接调用的代码。所以自己用各个组件写了一个类似的,并做了一些修改。

此处先上传样式,不涉及过多功能展现。

1、增加的部分

可以滑动删除,使用了van-swipe-cell的组件

2、样式展示

    

3、代码示例

wxml

<--wxml-->
<view class="myAddress">我的地址</view>

<van-radio-group 
 bind:change="radioChange" 
 value="{{radio}}">
<block 
 wx:for="{{AddressList}}" 
 wx:key="index" 
 class="addressList" 
 data-index="{{ index }}">

<view class="addressAll">
  <van-swipe-cell
  id="{{index}}"
  right-width="{{ 65 }}"
  async-close
  bind:close="onClose"
>
<van-cell-group inset>
   <van-cell>
      <view class="cellContainer">
        <van-radio
         checked-color="#07c160"
         name="{{ index }}">
        </van-radio>
        <view class="addressMsg">
           <view class="peopleMsg">
           <view class="peopleName">{{item.name}}</view>
           <view class="peoplePhone">{{item.number}}</view> 
           <view class="default" id="{{index}}" wx:if="{{index==0}}">默认</view>
        </view>
        <view class="peopleAddress">{{item.value}}</view>
      </view>
      <van-icon 
       name="edit" 
       size="50rpx" 
       class="editIcon"
       id="{{index}}" 
       bindtap="edit"/>
    </view>
   </van-cell>
</van-cell-group>

  <view slot="right" class="right">
     <view wx:key="index">删除</view>
  </view>
</van-swipe-cell>

 <van-dialog id="van-dialog"/>
<--addressAll--end-->
  </view>
 </block> 
</van-radio-group>

 <van-button round type="primary" size="large" bindtap="addAddress" class="addAddress">新增地址</van-button>

wxss 

  page{
    background-color: #eee;
  }
  .myAddress{
    margin: 20rpx;
  }
  .right{
      background-color: red;
      height: inherit;
      width: 65px;
      color: white;
      display: flex;
      align-items: center;
      justify-content: center;
      text-align: center;
      /* touch-action: none */
      
    }
    /* addressList单个地址块的样式 */
  van-radio,.addressList{
      display: grid;
    }
  van-dialog{
    position: relative;
    display: grid;
  }
  /* van-swipe-cell的样式 */
  .addressAll{
    margin-bottom: 20rpx;
  }
  .cellContainer{
    display: flex;
  }
  /* 解决报错问题 */
  .van-cell {
    touch-action: none;
  }
  
  /* 默认块的样式 */
  .default{
    margin-left: 30rpx;
    width: 70rpx;
    height: 40rpx;
    line-height: 40rpx;
    color: #fff;
    border-radius: 20rpx;
    font-size: 26rpx;
    text-align: center;
    background-color: #07c160;
  }
  /* 地址详细信息name+phone+value */
  .addressMsg{
    display: grid;
    width: 500rpx;
    /* padding: 30rpx 0; */
  }
  /* name+phone */
  .peopleMsg{
    display: flex;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .peopleName{
    
    text-overflow: ellipsis;
    margin-right: 20rpx;
  }
  /* address */
  .peopleAddress{
    text-align:left;
  }
  /* 按钮样式 */
  .addAddress{
    position: absolute;
    bottom: 50rpx;
    width: 100%;
  }

js

import Dialog from '../../miniprogram_npm/@vant/weapp/dialog/dialog';
//注意引入Dialog,不然会报错。不想引入dialog也可以使用wx.showModal()
Page({
    data:{
        AddressList:[
          {
            name:'牛爷爷',
            value:'翻斗花园A0022',
            number:'111111',
          },
        {
          name:'胡图图',
          value:'翻斗花园A001',
          number:'222222',
        }],
        radio:0,//选中的radio的索引值
        },
        radioChange(event) {
            this.setData({
              radio: event.detail,
            });
            console.log(this.data.radio);
          },
          onClose(event) {
             const { position, instance } = event.detail;
             switch (position) {
               case 'left':break;
               case 'cell':
                 instance.close();
                 break;
               case 'right':
            console.log("确定");
            Dialog.confirm({
              title:'提示',
              message: '确定删除吗?',
            }).then(() => {
            //确定
             instance.close();
        
            }).catch(()=>{
            //取消
             instance.close();
            });
              //另一种写法
              // wx.showModal({
              //   cancelColor: 'cancelColor',
              //   title: '提示',
              //   content: '确定删除?',
              //   cancelColor:"#000",
              //   confirmColor:"#3071a9",
              //   success: function (res) {
              //       if (res.confirm) {
              //         console.log('确定')
              //     } 
              //     else {
              //         console.log('取消')
              //       }
              //     }
              //   })
          break;
         }
         
       },
})

4、总结

引入了van-cell、van-cell-group、van-swipe-cell、van-radio、van-radio-group、van-dialog、van-button、van-icon等组件来完成这个页面布局。

注意点:1、在引入组件后,直接调用可能达不到我们想要的页面效果,此时需要我们自己设置css样式,例如:display:grid/flex等。

2、在使用swipe-cell组件时,可能会出现关于渲染层错误的报错。

 

解决方法:设置css样式:

.van-cell{
touch-action:none
}

此篇作为写完地址列表页面练习的总结,有问题欢迎指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值