微信小程序,动态添加和删除表单项

环境

小程序 UI 组件: Vant Weapp

index.wxml

index.wxml文件中编写主要的结构代码,例如添加、删除按钮。

内心os:你都用UI组件了,为啥还要用官方的picker 组件???表单组件 /picker

我:一开始我也是这样想的,但使用van-picker 确实是可以实现。但我遇到了其他的问题(多个van-picker选中数据会覆盖之前选中的数据),之后换成picker 完美解决问题。

<view class="view-btn">
        <van-button class="view-btn-add" type="primary" size="small" bindtap="addList">添加项</van-button>
        <van-button type="warning" size="small" bindtap="delList">删除项</van-button>
    </view>
    <block wx:for="{{lists}}" wx:for-item="item" wx:key="{{index}}">
        <view class='picker-view'>
          <picker bindchange="bindPickerChange" value="{{item.mainRiskVal}}" range="{{mainRiskList}}" range-key="{{'name'}}" data-main-id="{{index}}" data-main-risk-list="{{mainRiskList}}">
            <view class="picker-view-item">
              <block wx:if="{{mainRiskList[item.mainRiskVal].name == '' || mainRiskList[item.mainRiskVal].name == null}}">
                <view>请选择主要类型</view> 
              </block>
              <block wx:else>
                <view>主要类型</view> 
              </block>
              <view>{{mainRiskList[item.mainRiskVal].name}}</view>
            </view>
          </picker>
        </view>
        <van-field bind:blur="onConfirmControlMeasures" value="{{ item.remark }}" data-main-id="{{index}}" label="备注" type="textarea" placeholder="请输入备注描述" clearable autosize="{{ autosize }}" />
    </block>
index.js

index.js文件中,实现点击"添加项"按钮添加一个表单(包含输入框和下拉框),点击"删除项"按钮删除一个表单(包含输入框和下拉框)。

注意:在下拉框选中后获取选中的数据问题

Page({
  /**
   * 页面的初始数据
   */
  data: {
    autosize: {
      maxHeight: 100,
      minHeight: 50
    },
    mainRiskList: [],
    lists: [{
      mainRiskVal: '',
      mainRisk: '', 	// 主要类型编号
      mainRiskCn: '',	// 主要类型名称
      remark: '', 		// 备注
    }],
  },
  // 添加选项
  addList: function(){
    let lists = this.data.lists;
    let newData = {
      mainRiskVal: "",
      mainRisk: "",
      mainRiskCn: "",
      remark: ""
    };
    lists.push(newData);
    this.setData({
      lists: lists,
    });
  },
  // 删除选项
  delList: function () {
    let lists = this.data.lists;
	// 至少保留一项
    if(lists.length > 1){
      lists.pop();
    }
    this.setData({
      lists: lists,
    });
  },
  //获取主要类型列表数据
  onLoadMainRiskList(){
    const that = this;
    wx.showLoading();
	// dataDictionaryType是封装后的请求方法
    dataDictionaryType({
      params: params
    }).then((res) => {
      wx.hideLoading();
      if(res){
        if(res.length > 0){
          const dictList = [];
          res.forEach(function(item, index){
            const dictObj = {};
            dictObj.id = item.id;
            dictObj.name = item.name;
            dictList.push(dictObj);
          });
          that.setData({ mainRiskList: dictList });
        }
      }
    });
  },
  // 下拉选择事件
  bindPickerChange: function(e) {
    let mainId = e.currentTarget.dataset.mainId;
    let mainRiskList = e.currentTarget.dataset.mainRiskList;
    const { value } = e.detail;
    let oldList = this.data.lists;
    if(oldList && oldList.length > 0){
      for(let i= 0; i< oldList.length; i++){
		// 获取选中的类型名称和编号
        if(i == mainId){
          oldList[i].mainRiskVal = value;
          oldList[i].mainRisk = mainRiskList[parseInt(value)].id;
          oldList[i].mainRiskCn = mainRiskList[parseInt(value)].name;
          break;
        }
      }
      this.setData({
        showMainRisk: false, 
        lists: oldList,
      });
    }
  },
  // textarea失去焦点后获取输入框的数据
  onConfirmControlMeasures(e){
    let mainId = e.currentTarget.dataset.mainId;
    const { value } = e.detail;
    let oldList = this.data.lists;
    if(oldList && oldList.length > 0){
      for(let i= 0; i< oldList.length; i++){
        if(i == mainId){
          oldList[i].remark = value;
        }
      }
      this.setData({
        lists: oldList,
      });
    }
  },
})
index.wxss
.view-btn{
    text-align: center;
    margin: 20rpx;
}

.view-btn-add{
    margin:0 50rpx;
}

.picker-view {
    margin: 10rpx 25rpx;
    font-size: 14px;
}

.picker-view-item{
    width: 100%;
    box-sizing: border-box;
    padding: 10rpx;
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
}
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微信小程序连接 MySQL 实现增删改查需要使用一个后端语言来操作数据库。具体来说,需要在小程序前端使用 JavaScript 发送请求,在后端使用 Node.js 来接收请求并与 MySQL 交互。 首先,你需要在小程序前端使用 wx.request 发送请求,这个请求会被 Node.js 服务器接收到。在小程序中请求可以这样写: ``` wx.request({ url: 'https://example.com/insert', // 服务器地址 method: 'POST', data: { name: 'John Doe', age: 30 }, success (res) { console.log(res.data) } }) ``` 其次,在服务器端使用 Node.js 使用 `mysql`库 来连接和操作数据库 ``` const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'test' }); connection.connect(); app.post('/insert', (req, res) => { const { name, age } = req.body; const sql = `INSERT INTO users (name, age) VALUES ('${name}', ${age})`; connection.query(sql, (error, results) => { if (error) throw error; res.send(results); }); }); ``` 在这里是 增加的例子, 删除,修改,查询操作语句类似。 需要注意的是,将数据库的相关信息(用户名、密码等)和 SQL 语句放在前端是不安全的,应该放在后端进行处理。 上面给出的代码只是一个示例,实际开发中还 ### 回答2: 微信小程序是一种基于微信平台的应用程序,它具有轻便、快速、跨平台的特点。连接MySQL数据库是实现小程序数据存储和管理的一种常见方式。下面是一个简要的步骤,用于在微信小程序中连接MySQL数据库并实现增删改查操作。 1. 首先,在小程序项目的后端服务器上安装并配置MySQL数据库服务。确保数据库服务正常运行,并创建相关的数据表存储需要的数据。 2. 在小程序的后端服务器代码中,使用适当的方式(如Node.js)连接MySQL数据库。这可以通过安装MySQL模块以及配置数据库连接信息来实现。 3. 创建一个与MySQL数据库交互的API,用于处理小程序数据库之间的数据传输。可以使用HTTP请求(如POST和GET)将数据发送到服务器和接收服务器返回的数据。 4. 编写小程序前端代码,实现用户界面和交互逻辑。通过调用后端服务器的API,向MySQL数据库发送请求,并将结果显示给用户。 5. 实现增删改查功能,可以通过发送包含相关参数的API请求,来向数据添加新的数据、更新已有数据删除数据。同时,可以通过发送查询请求,从数据库中检索需要的数据。 6. 在小程序前端界面上显示来自数据库的数据。根据需求,可以使用列表、表格、图表等方式展示数据,并提供相应的操作按钮或选项。 需要注意的是,为了保证数据安全和防止恶意攻击,需要对数据库连接和API请求进行安全性处理,如输入合法性验证、防范SQL注入等。此外,为提高数据操作效率,可以考虑使用数据库索引、合理优化查询语句等方法。 总结起来,实现微信小程序连接MySQL数据库的增删改查操作,需要在服务器端配置MySQL数据库服务并编写相应的API,同时在小程序前端代码中调用这些API实现数据的传输和展示。 ### 回答3: 微信小程序与MySQL数据库的连接可以通过服务端进行实现。下面是一个简单的示例,演示如何在微信小程序中连接MySQL数据库并进行增删改查操作。 1. 首先,需要在服务端搭建一个用于连接MySQL数据库的接口,可以使用Node.js与Express框架来实现。在接口中,需要引入MySQL模块,配置数据库连接信息,并编写相应的SQL语句来执行增删改查操作。 2. 在微信小程序前端代码中,可以通过wx.request方法来发送HTTP请求,与服务端接口进行数据交互。可以在小程序的某个页面中编写表单,输入要进行的操作以及相应的数据,当点击提交按钮时,使用wx.request方法发送请求到服务端接口。 3. 在服务端接口中,根据前端发送的请求,解析相应的参数,执行对应的SQL语句进行增删改查操作。将操作结果返回给前端。 4. 在微信小程序前端代码中,接收服务端返回的数据,并根据需要进行相应的处理和展示。 需要注意的是,连接MySQL数据库的接口需要进行安全验证,防止恶意操作和信息泄露。同时,需要注意及时对用户输入的数据进行参数校验和过滤,防止SQL注入等安全风险。 以上是一个简单的描述,实际实现过程中还需要根据具体的需求进行详细设计和编码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值