uniapp——左滑编辑删除按钮实现,以及表单验证

简介: 左滑编辑删除按钮实现,以及表单验证

滑动交互

1、下载滑动插件,引入

2、使用方法

/* 引用 */
import tSlide from "@/components/t-slide/t-slide.vue"
components:{tSlide}
/* 使用 */
<template>
    <view class="t-wrap" >
      <t-slide ref="slide"  @edit="edit" @del="del" @itemClick="itemClick">
      //  内容区域 自定义样式
           <template v-slot:default="{item}">
                <view>
                       {{item.content}}
                </view>
           </template>
      </t-slide>
    </view>
</template>

在onLoad中赋值

this.$nextTick(()=>{
    this.$refs.slide.assignment(this.dataList)  //this.dataList 你的数据数组
})

监听事件

methods: {
            //点击单行
            itemClick(data){
                console.log('点击',data)
            },
            //删除
            del(data){
                console.log('删除',data)
                uni.showToast({
                    title:'删除ID--'+data.id,
                    icon:'none'
                })
            },
            //编辑
            edit(data){
                console.log('编辑',data)
                uni.showToast({
                    title:'编辑ID--'+data.id,
                    icon:'none'
                })
            },
        }

新建一个页面用来存放vuex中的list数组

page.js

82f97a8f45744e33b94c2d5c3a58741b.png

目录结构如下:

6d8379f22c0b4e7292d21bd85340f909.png

index.js

6b91d1f971aa45fa859cb1f19fb88cc0.png

替换原有的数据

00062f51c6d546ac84307ec0c96940ad.png

效果如下:

74bae7df661c498fad812846ae2f5ea4.png

渲染数据

接下来就是渲染对应的地址数据

page.js
export default {
  state:{
  List: [{
    name: '张珊珊',
    phone:'18989897878',
    email:'1159006386@qq.com',
    province: '安徽省',
    city:"合肥市",
    district:"龙泉路七里塘街道", // 街道
    address: '金厦小区', //详细地址
    default:0
    },
  ]
  },
  mutations:{
  addAddress(state,preload){
    state.List.unshift(preload)
  }
  }
}

把格式替换成address.vue页面中的数据格式

fa9abdc2ae10470a916e923cc684f00f.png

67e08dfa72214da9b5eacc9d3b8e8ef1.png

在page.js中写一个载荷用来添加列表地址

e77c82dbcfa24371a9126651d765013b.png

在点击保存后触发载荷添加form中的数据

import {mapMutations} from 'vuex'
methods: {
  ...mapMutations(['addAddress']),
    submit(){
  this.addAddress(this.form)
  uni.navigateBack({
    delta:1,
  });
  }
}

address.vue页面效果图

93fbb292238d45f9b190a1feaf9014cf.png

点击保存后

732e7fd95790487f8a620a1dfaf96a20.png

detail.vue页面 效果图

622936d39a694b2ab3abf837dfd81704.png

接下来就是对表单进行验证

正则表单式验证input表单中的,姓名,电话,邮编,以及详细地址

下面是正则表单式验证方式

address.vue页面

rules: {
      name: [{
      rule: /^.{2,12}$/,
      msg: "用户名必须是2-12为字符"
      }],
      phone: [{
      rule: /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
      msg: "请输入11位的正确的手机号码"
      }],
      email: [{
      rule:/^[0-9]{6}$/,
      msg: "中国邮政编码为6位数字"
      }],
      address: [{
      rule: /^.{2,50}$/,
      msg: "地址最低不少于2个字"
      }]
    },

定义一个方法validate

validate(key) {
    var check = true;
    this.rules[key].forEach(v => {
      if (!v.rule.test(this.form[key])) {
      uni.showToast({
        title: v.msg,
        // 勾号消失
        icon: 'none'
      })
      return check = false
      }
    })
    return check
    },

在保存时验证信息是否正确

19fc1fa4e8aa4895a575ec9b782f4b6e.png

submit(){
    this.addAddress(this.form)
    if (!this.validate('name')) return;
    if (!this.validate('phone')) return;
    if (!this.validate('email')) return;
    if (!this.validate('address')) return; 
    uni.navigateBack({
    delta:1,
    });
    },

编辑(核心)

插件t-slide.vue页面需要获得index索引值

67f229a06be24cbdb42066dc75227ce1.png

d1e8c21ccb144341acec8f3ca309b0e4.png

给address.vue设置一个控制字符

isEdit: false,
index: -1,

address.vue

onLoad(e) {
    if(e.data){
    let result = JSON.parse(e.data)
    this.form = result.item
    this.index = result.index
    console.log(this.index);
    this.isEdit = true
    }
  },

保存按钮事件

if (!this.validate('name')) return;
    if (!this.validate('phone')) return;
    if (!this.validate('email')) return;
    if (!this.validate('address')) return;
    if (this.isEdit) {
      this.updatePath({
      index: this.index,
      item: this.form,
      })
      uni.showToast({
      title: '修改成功'
      });
      uni.navigateBack({
      delta: 1,
      });
      return;
    } else {
      this.addAddress(this.form)
      uni.navigateBack({
      delta: 1,
      });
    }

记得引入updatePath

...mapMutations(['addAddress', 'updatePath']),

page.js

// 修改
  updatePath(state,{index,item}){
    for (let key in item) {
    console.log(key);
    state.List[index][key] = item[key]
    }


相关文章
|
2月前
Uniapp 各类 button按钮
Uniapp 各类 button按钮
34 0
|
2月前
|
移动开发 小程序 API
uniapp中各种状态的按钮
uniapp中各种状态的按钮
168 0
|
8月前
|
前端开发
uniapp checkbox样式失效,选中框选中按钮不显示
uniapp checkbox样式失效,选中框选中按钮不显示
147 0
uniapp switch按钮的使用开关按钮效果demo(整理)
uniapp switch按钮的使用开关按钮效果demo(整理)
uniapp上传预览大图-带删除按钮-摄像机-相册
uniapp上传预览大图-带删除按钮-摄像机-相册
uniapp上传多张图片-带删除按钮查看大图效果demo(整理)
uniapp上传多张图片-带删除按钮查看大图效果demo(整理)
|
1天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的房地产销售管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的房地产销售管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
16 7
|
1天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的广西文化传承小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的广西文化传承小程序的详细设计和实现(源码+lw+部署文档+讲解等)
16 3
|
1天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的宠物服务中心的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的宠物服务中心的详细设计和实现(源码+lw+部署文档+讲解等)
14 6
基于SpringBoot+Vue+uniapp的宠物服务中心的详细设计和实现(源码+lw+部署文档+讲解等)
|
4天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的宠物中心信息管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的宠物中心信息管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
7 0