微信小程序中一些JS常识
2017-12-20 本文已影响1262人
奇怪的她的他
1.小程序中不支持HTTP请求,配置后台服务器域名只支持https(假设配置后,运行程序还是报域名配置问题,重启开发工具即可),图片地址可以用http。
2.支持请求网页,但是必须在微信公众平台小程序后台配置业务域名。
3.小程序中推送通知又叫模板消息,以“服务通知”的形式推送给用户,一旦微信被后台杀死,就没有推送。同时模板消息只能在两种情况下,才能生成,第一,支付行为,第二,表单提交行为——表单提交:一般可以突破微信官方给定的模板消息上限数量,一般是用一个表单控件不满全屏,然后在表单里添加其他控件,这样用户每进行一次用户交互就能生成一个formId,公司后台就能存储该用户多个formId,可用于多次推送。一个formid只能用一次。
4.小程序中全局变量的存与取。两种方式,一种是存储在缓存中,类似于iOS中的UD,只有小程序被用户删除才会清空,另一种是globalData,这是存储在程序中,只要微信被杀死,globalData的数据就会被清空。下面分别用代码展示:
第一种StorageSync
wx.setStorageSync("key", value);//存
var value = wx.getStorageSync("key");//取
第二种globalData,先在项目app.js文件中找到globalData:{}函数中添加一个你要存的字段
globalData: {
name:"",//属性名自己定
}
//然后在需要存的地方:getApp().globalData.name = "";
//取的时候用:var name = getApp().globalData.name;
5.相信很多人在开发到一定时候,都会想封装一些类,接下来给大家说说封装类的创建及外部调用。我们就先以网络请求封装为例。
首先你需要新建一个netRequest.js文件,然后用js的方法创建一个函数:
/**
* url是请求连接,当然要实现网络请求,请先在服务器后台配置域名
* para是传给服务器的json内容
* style是请求类型GET或者POST
* callback是回调函数,可以传值给调用者
*/
function requestData(url,para,style,callback){
var contentType;
if(style == "GET"){
contentType = 'application/json';
}else{
//post请求必须要设置header类型为以下类型,get请求不用
contentType = 'application/x-www-form-urlencoded';
}
wx.request({
url: url,
data: para,
method: style,
header: {
"content-type": contentType,
},
success: function(res) {
//返回请求结果给调用者
callback(res);
}
})
}
其次是在当前js文件中添加以下代码:
//作用是暴露接口给外部类
module.exports = {
requestData : requestData
}
然后在其他类调用时,先在外部类的最顶部添加一行代码,引用类对象
var netRequest = require("相对路径");
最后在外部类中调用封装类的方法。
//url和para都需要自己传入
netRequest.requestData(url, para, "GET", function (data) {
//打印请求结果
console.log(data);
})
6.延时函数:
setTimeout(function(){
//这儿写延时执行的内容
},5000);//这儿是延时的时间,单位是毫秒
7.循环执行某个函数:
首先在js文件头部定义一个对象var interval;
然后在需要循环执行的地方初始化
interval = setInterval(function () {
that.getCarGps();
//循环执行代码
}, 3000) //循环时间 这里是1秒
//停止定时器的方法
clearInterval(interval);
注意:当循环函数里有延时函数时,记得先停掉循环函数再使用延时函数,不然会报错;
8.说说js中this和that的妙用。
对于this变量最要的是能够理清this所引用的对象到底是哪一个,也许很多资料上都有自己的解释,但有些概念讲的偏繁杂。而我的理解是:首先分析this所在的函数是当做哪个对象的方法调用的,则该对象就是this所引用的对象。
在javascript语言中,this代表着当前的对象,它在程序中随着执行的上下文随时会变化。微信小程序很多API中回调函数对象已经发生了变化。所以已经不是原来的页面对象了。自然就没有了原来页面的data属性,也没有了this.data的说法。
可能说回调函数大家不是很理解,比如很多API都有一个success: function(res) {},大括号里面就是回调函数内部。解决的办法就是在回调函数外部复制一份当前的对象。
var that=this;//把this对象复制到临时变量that
这个时候就能用
that.setData({
//对Page里面的data做一些更改
})