咨询电话:
15628812133
19
2022/04

03小程序JS前后端交互

发布时间:2022-04-19 17:55:31
发布者:sgz
浏览量:
0


????????第三节课又来了。今天,我们将通过小程序页面移动JS前后端交互的实现包括:

  • JS传静态数据

  • JS传输列表数据,循环输出

  • 点击按钮刷新时间

  • 点击按钮自动刷新时间

1. 通过JS静态数据的传输

????????或者按照之前的小程序课程列表learning模块继续推进,在JS设置端定义数据,例如timestring变量为“default time这样的字符串直接在data设置在中间。

/**    * 页面初始数据    */data: {                timestring: "default time"},


????????上面在index.js在文件中定义timestring,在WXML这个变量可以在中间使用,使用方法是{{timestring}}。其中timestring也可以换成任何你想用的其他字符串,只要JS端和WXML可以用一个。(但是小程序不能保留字段,比如data、this等)

时间:{{timestring}}

????????除上述直接在全局变量之外data中直接定义,还可以在JS使用文件函数this.setData()动态定义变量和值。index.js在文件中找到onLoad函数,这是小程序默认带来的函数,在index.wxml加载时会触发onLoad函数,所以我们可以在页面加载前做一些数据赋值操作,比如this.setData()设置timestring另一个值。现在想象一下,index.wxml中的timestring会显示哪个值?default time”还是“2022-04-17 20:00:00”?

/**    * 页面的初始数据    */data: {                timestring: "default time"},
/**    * 生命周期函数--加载监控页面    */onLoad: function (options) {                this.setData({                                "timestring": "2022-04-17 20:00:00"                };},


????????看下结果,timestring还是显示2022-04-17 20:00:00,即通过this.setData()设定的值涵盖了之前默认的default time”。

2. 通过JS传递列表数据

? 通过JS例如,我们不仅可以传输字符串类型的数据,还可以传输数组类型的数据index.js目前的小程序课程列表数据可以直接定义,也可以直接定义onLoad动态设置函数。

/**    * 页面的初始数据*/data: {                timestring: "default time",                courseList: [                                {"id":"1","title":"小程序HelloWorld","link":"","status":"已完成"},                                {"id":"2","title":"小程序页面和样式改进","link":"","status":"已完成"},                                {"id":"3","title":"小程序JS前后端交互","link":"","status":"进行中"}                ]},

? 在index.wxml中可以通过{{courseList}}查看数据,发现会显示[object Object],[object Object],[object Object]”,是对象类型数据,无法直接查看,但是我们可以通过循环输出数据。

????????我们看下index.wxml以前把所有的数据都写了一遍,现在我们可以通过wx:for实现数组的遍历,无论多少行数据只能写一次,动态输出。以下代码非常简单,可以替换以前的冗长代码。

                                                序号                                标题                                状态                                查看                                                                {{item.id}}                                {{item.title}}                                {{item.status}}                                                                        查看                                                

????????扩大学习,通过wx:for通过wx:if和wx:else可根据变量值判断该行是否输出。更多信息参考文件:https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/。

实时刷新当前按钮

??????? JS前后端交互不仅仅是从JS向WXML传递数据,从WXML触发事件到JS例如,用户可以在界面中点击按钮触发JS中的函数。

????????然后是前面显示时间的功能,我们希望实时显示当前时间index.wxml添加一个刷新按钮,希望点击后刷新显示当前时间button标签中使用bindtap绑定一个事件,名所谓,这里用refresh只要前后端一致。


????????在index.js重新定义一个refresh函数与前端一致。中间做了几件事,第五行通过console.log()在控制台中输出信息,通常用于调试代码。第7行开始调用之前定义的函数获取当前时间,并将时间赋值timestring在中间,这样前端就可以显示时间了。第12行开始显示操作提示,每次点击界面中的刷新按钮,时间将动态更新为当前的实时时间,并将出现刷新成功提示,并将在控制台中输出console.log()中的数据,如果timestring显示结果与预期不同,可以通过console.log()调试代码。参考文件:https://developers.weixin.qq.com/miniprogram/dev/reference/api/console.log.html


/**    * 刷新操作    */refresh: function (e) {????console.log(e);
               var time = util.formatTime(new Date());                this.setData({                                "timestring": time                };
               wx.showToast({                        title: 刷新成功,                };},

??????? wx.showToast除了定义title还可以定义icon,可选值有:

  • success,显示成功图标

  • error,显示失败图标

  • loading,显示加载图标

  • none,不显示图标

????????尝试不同的显示样式很方便,更多信息可以参考官方文件:https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html。

自动更新时间不需要刷新。

????????当前时间实时显示在页面上。事实上,我们不必每次都点击刷新按钮。当然,以上数据是通过刷新按钮更新的,以触发页面中的事件JS处理事件并为变量设置数据。为了更自然地实时显示当前时间,我们可以JS中通过setInterval按固定频率设置timestring变量。

??????? setInterval一个函数可以定期执行,包括两个参数。第一个参数是需要执行的函数,第二个参数是间隔多少毫秒执行一个函数。设置数据时注意不要再使用this.setData,而要先定义var that=this;再用that.setData设置。

/**    * 生命周期函数--加载监控页面    */onLoad: function (options) {                this.setData({                                "timestring": "2022-04-17 20:00:00"                };
               var that = this;                var a = setInterval(function(){                                console.log("setInterval");                                var time = util.formatTime(new Date());
                               that.setData({                                                "timestring": time                                };                },1000);},

????????这样要刷新操作,页面会自动加载当前时间,比如2022年4月2日凌晨3点多。

????????这里有更多文档参考:https://developers.weixin.qq.com/miniprogram/dev/reference/api/setInterval.html。


作业

? 这个操作也是完成几个操作,提交结果截图和代码截图。

  • 在JS列表数据设置在中间WXML文件中使用wx:for循环输出

  • 自动刷新设置时间




回顾7天入门小程序开发系列文章

返回列表