微信小程序开发之——调查问卷-表单数据绑定(2.2.4)

一 概述

  • 表单数据绑定的实际需求
  • 将data数据替换表单默认数据
  • 服务器返回data数据给微信小程序

二 实际需求

前面的小节中,表单是完全编写在WXML中的,然而在实际开发中,会经常需要对表单的默认值进行变更。例如,用户发现已经提交的调查问卷中有些内容填写错误,需要进行修改,希望程序提供一个修改的表单,该表单默认已经填写了上次提交的内容,这就需要从服务器获取已经提交的数据,然后将数据填入到表单中

三 将data数据替换表单默认数据

3.1 修改的数据

  • 针对上述需求,可以通过表单数据绑定来实现。
  • 首先在pages/index/index.js文件的data数据中保存表单的默认数据

3.2 index.js中data数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
data: {
   name:'张三',
   gender:[
     {name:'男',value:'0',checked:true},
     {name:'女',value:'1',checked:false}
   ],
   skills:[
     {name:'HTML',value:'html',checked:true},
     {name:'CSS',value:'css',checked:false},
     {name:'JavaScript',value:'js',checked:false},
     {name:'Photoshop',value:'ps',checked:false}
   ],
   opinion:'测试'
 },

3.3 index.wxml中代码(预览画面已有数值)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<view class="container">
<form bindsubmit="submit">
<view>
<text>姓名:</text>
<input name="name" value="{{name}}"/>
</view>

<view>
<text>性别:</text>
<radio-group name="gender">
<label wx:for="{{gender}}" wx:key="value">
  <radio value="{{item.value}}" checked="{{item.checked}}"/>
  {{item.name}}
</label>
</radio-group>
</view>

<view>
  <text>专业技能:</text>
  <checkbox-group name="skills">
    <label wx:for="{{skills}}" wx:key="value">
      <checkbox value="{{item.value}}" checked="{{item.checked}}" />{{item.name}}
    </label>
  </checkbox-group>
</view>

<view>
  <text>您的意见:</text>
  <textarea name="opinion" value="{{opinion}}" />
</view>
<button form-type="submit">提交</button>
</form>
</view>

3.4 说明

上述代码中,

  • wx:for列表渲染,用于根据给定的数组重复渲染该组件。
  • 在列表渲染标签内,可以使用item表示数组的当前项,使用index表示当前项的下标。
  • wx:key表示每一项的唯一标识,值为value表示将每一项的value属性作为唯一标识,也可以用保留关键字*this表示将每一项本身作为唯一标识
  • 在列表渲染中,设置wx:key可以在数据改变后在页面中重新渲染时,使原有的组件保持自身的状态,而不是重新创建,并且提高了列表渲染时的效率

四 服务器返回data数据给微信小程序

4.1 说明

通过以上操作,实现了将表单中的数据分离出来,就可以通过程序控制表单的各项的选中状态。下面在服务器端项目index.js文件的app.listen()前面增加代码,将data中的数据放入服务器端,由服务器将data返回给小程序

4.2 服务器端index.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const express=require('express')
const bodyParser=require('body-parser')
const app=express()
app.use(bodyParser.json())
//处理POST请求
app.post('/',(req,res)=>{
    console.log(req.body)
    res.json(req.body)
})
var data={
    name:'张三',
    gender:[
        {name:'男',value:'0',checked:true},
        {name:'女',value:'1',checked:false}
    ],
    skills:[
        {name:'HTML',value:'html',checked:true},
        {name:'CSS',value:'css',checked:false},
        {name:'JavaScript',value:'js',checked:false},
        {name:'Photoshop',value:'ps',checked:false}
      ],
      opinion:'测试'

}
app.get('/',(req,res)=>{
    res.json(data)
})
//监听300接口
app.listen(3000,()=>{
    console.log('server running at http://localhost:3000')
})

上述代码,用于实现GET请求方式,将data以JSON格式返回

4.3 小程序 index.js

完成服务器端代码后,在小程序pages/index/index.js文件的onLoad事件函数中实现页面打开后自动向服务器发送请求,获取表单中的初始数据,具体代码如下:

1
2
3
4
5
6
7
8
9
onLoad: function (options) {
   var that=this
   wx.request({
     url: 'http://localhost:3000/',
     success:function(res){
       that.setData(res.data)
     }
   })
 },

4.4 that和this

上述代码中,success的回调函数中,this的指向发生了变化,因此需要通过代码将this保存为that后使用。除了这种方式,还可以利用ES6的箭头函数语法来更好地解决这个问题,无需再用that保存ths,具体代码如下

1
2
3
4
5
6
7
8
onLoad: function (options) {
   wx.request({
     url: 'http://localhost:3000/',
     success:res=>{
       this.setData(res.data)
     }
   })
 },

值得一提的是,由于wx.request()参数中的method属性的默认值为GET,因此在发送GET请求时可以省略method属性

微信小程序接入微信支付需要进行以下准备工作和技术实现: 1.准备工作: 1.1 申请材料:需要提供营业执照、银行开户许可证、组织机构代码证等材料。 1.2 费用:需要缴纳一定的费,包括认证费、服务费等。 1.3 申请流程:需要在微信支付平台上进行申请,提交相关材料并等待审核。 2.技术实现: 2.1 微信小程序微信支付流程:用户在小程序中选择商品并确认订单后,小程序向自己的服务端发送下单请求,服务端生成预支付订单并返回给小程序小程序再调起微信支付界面,用户完成支付后,微信会异步通知到服务端,服务端再查询支付结果并返回给小程序2.2 业务场景及代码实现: 2.2.1 确认订单:用户在小程序中选择商品并确认订单后,小程序向服务端发送下单请求,服务端生成预支付订单并返回给小程序2.2.2 下单:小程序收到预支付订单后,调用微信支付API生成支付参数,再将支付参数传递给小程序前端,小程序前端再调用微信支付API调起支付界面。 2.2.3 调起微信支付:用户在支付界面完成支付后,微信会异步通知到服务端,服务端再查询支付结果并返回给小程序2.2.4 查询支付结果:小程序前端可以通过调用服务端提供的查询支付结果接口来获取支付结果。 一些问题: 微信支付完成之后,微信会异步通知到自己的服务端,因为是异步的,所以建议小程序端主动去调接口触发查询支付结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值