1.小程序中不支持HTTP請(qǐng)求,配置后臺(tái)服務(wù)器域名只支持https(假設(shè)配置后,運(yùn)行程序還是報(bào)域名配置問題,重啟開發(fā)工具即可),圖片地址可以用http。
2.支持請(qǐng)求網(wǎng)頁,但是必須在微信公眾平臺(tái)小程序后臺(tái)配置業(yè)務(wù)域名。
3.小程序中推送通知又叫模板消息,以“服務(wù)通知”的形式推送給用戶,一旦微信被后臺(tái)殺死,就沒有推送。同時(shí)模板消息只能在兩種情況下,才能生成,第一,支付行為,第二,表單提交行為——表單提交:一般可以突破微信官方給定的模板消息上限數(shù)量,一般是用一個(gè)表單控件不滿全屏,然后在表單里添加其他控件,這樣用戶每進(jìn)行一次用戶交互就能生成一個(gè)formId,公司后臺(tái)就能存儲(chǔ)該用戶多個(gè)formId,可用于多次推送。一個(gè)formid只能用一次。
4.小程序中全局變量的存與取。兩種方式,一種是存儲(chǔ)在緩存中,類似于iOS中的UD,只有小程序被用戶刪除才會(huì)清空,另一種是globalData,這是存儲(chǔ)在程序中,只要微信被殺死,globalData的數(shù)據(jù)就會(huì)被清空。下面分別用代碼展示:
第一種StorageSync
wx.setStorageSync("key", value);//存
var value = wx.getStorageSync("key");//取
第二種globalData,先在項(xiàng)目app.js文件中找到globalData:{}函數(shù)中添加一個(gè)你要存的字段
globalData: {
name:"",//屬性名自己定
}
//然后在需要存的地方:getApp().globalData.name = "";
//取的時(shí)候用:var name = getApp().globalData.name;
5.相信很多人在開發(fā)到一定時(shí)候,都會(huì)想封裝一些類,接下來給大家說說封裝類的創(chuàng)建及外部調(diào)用。我們就先以網(wǎng)絡(luò)請(qǐng)求封裝為例。
首先你需要新建一個(gè)netRequest.js文件,然后用js的方法創(chuàng)建一個(gè)函數(shù):
/**
* url是請(qǐng)求連接,當(dāng)然要實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求,請(qǐng)先在服務(wù)器后臺(tái)配置域名
* para是傳給服務(wù)器的json內(nèi)容
* style是請(qǐng)求類型GET或者POST
* callback是回調(diào)函數(shù),可以傳值給調(diào)用者
*/
function requestData(url,para,style,callback){
var contentType;
if(style == "GET"){
contentType = 'application/json';
}else{
//post請(qǐng)求必須要設(shè)置header類型為以下類型,get請(qǐng)求不用
contentType = 'application/x-www-form-urlencoded';
}
wx.request({
url: url,
data: para,
method: style,
header: {
"content-type": contentType,
},
success: function(res) {
//返回請(qǐng)求結(jié)果給調(diào)用者
callback(res);
}
})
}
其次是在當(dāng)前js文件中添加以下代碼:
//作用是暴露接口給外部類
module.exports = {
requestData : requestData
}
然后在其他類調(diào)用時(shí),先在外部類的最頂部添加一行代碼,引用類對(duì)象
var netRequest = require("相對(duì)路徑");
最后在外部類中調(diào)用封裝類的方法。
//url和para都需要自己傳入
netRequest.requestData(url, para, "GET", function (data) {
//打印請(qǐng)求結(jié)果
console.log(data);
})
6.延時(shí)函數(shù):
setTimeout(function(){
//這兒寫延時(shí)執(zhí)行的內(nèi)容
},5000);//這兒是延時(shí)的時(shí)間,單位是毫秒
7.循環(huán)執(zhí)行某個(gè)函數(shù):
首先在js文件頭部定義一個(gè)對(duì)象var interval;
然后在需要循環(huán)執(zhí)行的地方初始化
interval = setInterval(function () {
that.getCarGps();
//循環(huán)執(zhí)行代碼
}, 3000) //循環(huán)時(shí)間 這里是1秒
//停止定時(shí)器的方法
clearInterval(interval);
注意:當(dāng)循環(huán)函數(shù)里有延時(shí)函數(shù)時(shí),記得先停掉循環(huán)函數(shù)再使用延時(shí)函數(shù),不然會(huì)報(bào)錯(cuò);
8.說說js中this和that的妙用。
對(duì)于this變量最要的是能夠理清this所引用的對(duì)象到底是哪一個(gè),也許很多資料上都有自己的解釋,但有些概念講的偏繁雜。而我的理解是:首先分析this所在的函數(shù)是當(dāng)做哪個(gè)對(duì)象的方法調(diào)用的,則該對(duì)象就是this所引用的對(duì)象。
在javascript語言中,this代表著當(dāng)前的對(duì)象,它在程序中隨著執(zhí)行的上下文隨時(shí)會(huì)變化。微信小程序很多API中回調(diào)函數(shù)對(duì)象已經(jīng)發(fā)生了變化。所以已經(jīng)不是原來的頁面對(duì)象了。自然就沒有了原來頁面的data屬性,也沒有了this.data的說法。
可能說回調(diào)函數(shù)大家不是很理解,比如很多API都有一個(gè)success: function(res) {},大括號(hào)里面就是回調(diào)函數(shù)內(nèi)部。解決的辦法就是在回調(diào)函數(shù)外部復(fù)制一份當(dāng)前的對(duì)象。
var that=this;//把this對(duì)象復(fù)制到臨時(shí)變量that
這個(gè)時(shí)候就能用
that.setData({
//對(duì)Page里面的data做一些更改
})