原生小程序地址管理--抖音小程序(详细)

该文展示了如何在微信小程序中创建一个HTML页面,用于用户输入和管理收货地址,包括使用picker组件选择地区,radio组设置默认地址,以及保存和编辑地址功能。代码示例涵盖了输入框绑定、事件处理和数据交互等关键部分。

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

HTML页面

详细地址这一块,小程序官方文档都有picker
在这里插入图片描述

<view class="addressBox">
    <view class="address-container">
        <!-- 新增收货地址 -->
        <view class="redact-address">
            <view class="possess-layout">
                <view class="mains">
                    <view class="address-msg">
                        <view class="item-msg">收货人</view>
                        <view class="section">
                            <input data-gater="addressObj.consignee" type="text" placeholder="请填写收货人姓名"
                                value="{{addressObj.consignee}}" bindblur="consigneeNameInput"
                                placeholder-class="phcolor" placeholder-style="font-size: 30rpx;" bindinput="bindinput"
                                maxlength="8"></input>
                        </view>
                        <view class="address-right">
                            <image src="../../../img/icon/icon-add-address-user.png"></image>
                        </view>
                    </view>
                    <view class="address-msg">
                        <view class="item-msg">手机号码</view>
                        <view class="section">
                            <input name="phone" data-gater="addressObj.phone" bindinput="bindinput" type="number"
                                placeholder="请填写收货人手机号码" value="{{addressObj.phone}}" maxlength="11"
                                bindblur="phoneInput" placeholder-class="phcolor"
                                placeholder-style="font-size: 30rpx;"></input>
                        </view>
                    </view>
                    <view class="address-msg">
                        <view class="item-msg">所在地区</view>
                        <view class="section" bindtap='select'>
                            <picker mode="region" bindchange="bindRegionChange" value="" custom-item="">
                                <text class="shuru" tt:if="{{!addressObj.area}}">请选择</text>
                                <view tt:if="{{addressObj.area}}">
                                    {{addressObj.area}}</view>
                                <view class="address-rights" bindtap='select'>

                                    <view class="right-icon"></view>

                                </view>
                            </picker>
                        </view>
                    </view>
                    <view class="address-msg">
                        <view class="item-msg">详细地址</view>
                        <view class="section">
                            <input data-gater="addressObj.address" bindinput="bindinput" type="text"
                                placeholder="街道、小区、乡镇、楼牌号等" value="{{addressObj.address}}"
                                bindblur="detailedAddressInput" placeholder-class="phcolor"
                                placeholder-style="font-size: 30rpx;" maxlength="35"></input>
                        </view>
                    </view>

                </view>
            </view>
        </view>
        

    </view>
    <view class="Defaultaddress">
        <!-- <radio checked="{{checked}}" bindtap="radiodengjiChange" style="transform: scale(0.7);" class="gg_radio" color="#1A7FFF">

        </radio> -->
        <radio-group bindchange="checkboxChange" value="{{addressObj.isDefault}}" data-ids="{{isDefault}}">
                <radio checked="{{checked}}" bindtap="radiodengjiChange" style="transform: scale(0.7);" class="gg_radio" color="#1A7FFF">
                </radio>
          </radio-group>
        <text class="p-Defaultaddress-text">设为默认地址</text>

    </view>
    <view class="action-contact">
            <button class="AddAddress" class="{{flag?'addAddress2':'addAddress1'}}" type="default" size="default" disabled="{{flag}}" bindtap="saveAddress">保存地址</button>
    </view>
</view>

设为默认地址为radio赋值

Page({
  data: {
    checked:false
  }
  })
  //默认地址
radiodengjiChange:function(e) {
  var check = this.data.checked;
  if (check) {
    this.data.checked = false;
    that.data.addressObj.isDefault = 1
    console.log("已取消选中");
  } else {
    this.data.checked = true;
    that.data.addressObj.isDefault = 0
    console.log("已选中");
  }
  this.setData({
    "checked": this.data.checked,
  });
},

在这里插入图片描述
isDefault 这个字段就是控制是否为默认地址 上边的代码为isDefault 赋值为0就是默认地址,1的话就不是默认地址,点击保存
在这里插入图片描述
列表里面展示:
在这里插入图片描述
里表里面的默认地址显示与隐藏
在这里插入图片描述
主要代码:
加个if就可以

<label class="radio">
  <view class='left'>
    <text data-id="{{[index,item.id]}}" bindtap="resertP" class='{{!item.isDefault ? 'radioColor2' :"radioColor"}}' tt:if="{{item.isDefault == 0}}">默认地址</text>
   </view>
</label>

地址列表页面HTML


<view class="{{maskFlag ? '':'mask'}}">
    <view class="addressBox">
        <view class="address-container">
            <!-- 收货地址管理 -->

            <view tt:if="{{tag==1}}" style="min-height: 500rpx;">
                <view style="min-height: 50vh;">
                    <radio-group bindchange="radioChange">
                        <view class='list-item' tt:for="{{addressList}}" tt:key="item.id">
                            <view class="head-container">
                                <view class="item-consignne">收 货 人 : &nbsp{{item.consignee}}</view>
                                <view class='item-head'>
                                    <text class='phone'>{{item.phone}}</text>
                                </view>
                            </view>


                            <view class='item-desc'>
                                <text>{{item.area}}{{item.address}}</text>
                            </view>

                            <view class='item-edit'>
                                <label class="radio">
                                    <view class='left'>
                                        <text data-id="{{[index,item.id]}}" bindtap="resertP" class='{{!item.isDefault ? 'radioColor2' :"radioColor"}}' tt:if="{{item.isDefault == 0}}">默认地址</text>
                                    </view>
                                </label>

                                <view class='right'>
                                    <view class="edit">
                                        <navigator url="/pages/saveAddress/saveAddress?id={{item.id}}&address={{item.address}}&area={{item.area}}&consignee={{item.consignee}}&isDefault={{item.isDefault}}&phone={{item.phone}}"
                                            hover-class="none" style="display: inline;">
                                            <view class="edit-box"></view>
                                            <text bindtap="navigateToEdit" data-id="1">编辑</text>
                                        </navigator>
                                    </view>
                                    <view class="del" bindtap="delAddr" data-id="{{item.id}}">
                                        <view data-id="{{item.id}}" class="del-box"></view>
                                        <text data-id="{{item.id}}">删除</text>
                                    </view>

                                </view>
                            </view>
                        </view>
                    </radio-group>
                </view>

                <view class="action-contact">

                    <!-- <button class="addAddress3" type="default" size="mini"> -->
                        <!-- <navigator url="/pages/saveAddress/saveAddress" hover-class="none"> -->
                            <button class="AddAddress" bindtap="AddAddress"
                        type="default" size="default">添加地址</button>
                            <!-- <view class="addIcon"> </view>
                            <text class="addA">添加地址</text> -->
                        <!-- </navigator> -->
                    <!-- </button> -->
                </view>
            </view>
            <!-- 新增收货地址 -->

            <view tt:if="{{tag==0}}" class="redact-address">
                <!-- <view class="noaddress"> -->
                    <image
                        src="../../images/noaddress.png">
                    </image>
                    <button class="AddAddress" bindtap="AddAddress"
                        type="default" size="default">添加地址</button>
                <!-- </view> -->
                <!-- <view class="possess-layout">
                    <view class="mains">
                        <view class="address-msg">
                            <view class="item-msg">收货人</view>
                            <view class="section">
                                <input class="input-class" data-gater="addressObj.consignee" type="text"
                                    placeholder="请填写收货人姓名" value="{{addressObj.consignee}}"
                                    bindblur="consigneeNameInput" placeholder-style="font-size: 28rpx;color: #999999;"
                                    bindinput="bindinput" maxlength="8"></input>
                            </view>
                            <view class="address-right">
                                <image src="../../../img/icon/icon-add-address-user.png"></image>
                            </view>
                        </view>
                        <view class="address-msg">
                            <view class="item-msg">手机号码</view>
                            <view class="section">
                                <input class="input-class" data-gater="addressObj.phone" bindinput="bindinput"
                                    type="number" placeholder-style="font-size: 28rpx;color: #999999;"
                                    placeholder="请填写收货人手机号码" value="{{addressObj.phone}}" maxlength="11"
                                    bindblur="phoneInput"></input>
                            </view>
                        </view>
                        <view class="address-msg">
                            <view class="item-msg">所在地区</view>
                            <view class="section" bindtap='select'>
                                <picker mode="region" bindchange="bindRegionChange" value="{{region}}" custom-item=""
                                    >
                                    <text class="shuru" tt:if="{{region.length<=0}}">请选择</text>
                                    <view tt:if="{{region.length>0}}">
                                        {{addressObj.area}}</view>
                                    <view class="address-rights" bindtap='select'>

                                        <view class="right-icon"></view>

                                    </view>
                                </picker>
                            </view>

                        </view>
                        <view class="address-msg">
                            <view class="item-msg">详细地址</view>
                            <view class="section">
                                <input class="input-class" data-gater="addressObj.address" bindinput="bindinput"
                                    type="text" placeholder-style="font-size: 28rpx;color: #999999;"
                                    placeholder="街道、小区、乡镇、楼牌号等" value="{{addressObj.address}}"
                                    bindblur="detailedAddressInput" maxlength="30"></input>
                            </view>
                        </view>

                    </view>
                </view> -->
                <!-- <view class="action-contact">
                    <button disabled="{{flag}}" class="{{flag?'addAddress2':'addAddress1'}}" bindtap="saveAddress"
                        type="default" size="mini">保存地址</button>
                </view> -->
            </view>

            <!-- 按钮部分 -->
        </view>
    </view>
</view>

点击编辑的时候跳转页面,并把数据携带过来
主要用到的就是data-abc(自己定义的)=‘也是自己定义的’
拿radio是否设为默认地址举个例子

<view class="Defaultaddress">
  <radio-group bindchange="checkboxChange" value="{{addressObj.isDefault}}" data-ids="{{isDefault}}">
    <radio checked="{{checked}}" bindtap="radiodengjiChange" style="transform: scale(0.7);" class="gg_radio" color="#1A7FFF">
    </radio>
  </radio-group>
  <text class="p-Defaultaddress-text">设为默认地址</text>
</view>

在js页面接收转过来的数据
在onLoad中

// 接收传过来的isDefault
    if(options.isDefault == 0){
      this.setData({
        checked: true,
      })
    }else{
      this.setData({
        checked: false,
      })
    }

在这里插入图片描述
演示一下取消默认地址
在这里插入图片描述
在这里插入图片描述
修改成功,此时的默认地址也跟着修改了
在试一下修改成默认地址
在这里插入图片描述
点击保存地址
在这里插入图片描述
OK可以了
删除的话就是传一个id就行 编辑也是传id
菜鸟一枚,欢迎各位技术大佬来指出错误,互相学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Best_北诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值