微信小程序中一些JS常識(shí)

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做一些更改
    })

9.小程序中不支持跳轉(zhuǎn)至APP或者APPStore或者安卓市場(chǎng)。但假如要引導(dǎo)用戶下載APP,可以用安卓端網(wǎng)頁實(shí)現(xiàn)APP的下載,iOS端只能引導(dǎo)用戶去safiri中打開APPStore下載鏈接。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容