本文內(nèi)所有問答,均選自sf.gg網(wǎng)站內(nèi)相關(guān)問答; 問題: 微信小程序怎么做 RSA 加密? 之前在網(wǎng)頁端 RSA 加密密碼用的 JSEncrypt現(xiàn)在要移植到微信小程序,由于 JSEncrypt 會(huì)使用到 window 對(duì)象,所以無法在小程序中使用 ...
本文內(nèi)所有問答,均選自sf.gg網(wǎng)站內(nèi)相關(guān)問答;
問題:
微信小程序怎么做 RSA 加密?
之前在網(wǎng)頁端 RSA 加密密碼用的 JSEncrypt
現(xiàn)在要移植到微信小程序,由于 JSEncrypt 會(huì)使用到 window 對(duì)象,所以無法在小程序中使用。
(微信小程序的)頁面的腳本邏輯是在JsCore中運(yùn)行,JsCore是一個(gè)沒有窗口對(duì)象的環(huán)境,所以不能在腳本中使用window,也無法在腳本中操作組件。
有人遇到過這樣的需求或者問題么?
答:color_cat
加密怎么會(huì)和window對(duì)象扯上關(guān)系,我用的rsa是這個(gè)http://www.ohdave.com/rsa/
問題:
求教怎么更改微信小程序中app.js的 globalData 屬性、值?
app.js中其中的globalData中的userInfont屬性、值要怎么設(shè)置和改變?求教高手、大蝦們
答:StudyMachine
在page的js中,聲明
var app = getApp();
之后就可以直接使用globalData,如:
app.globalData.userInfo = openid;
當(dāng)然,App()里面的其他屬性,方法都可以使用了
問題:
關(guān)于微信小程序 wx.request 的1個(gè)問題與1個(gè)吐槽
吐槽:wx.request 沒有async屬性,不支持同步請(qǐng)求,坑。
問題:wx.request 發(fā)出請(qǐng)求后,無論請(qǐng)求接口返回的 HTTP 狀態(tài)碼(200,500)是什么,都會(huì)進(jìn)入 success 回調(diào),什么時(shí)候會(huì)回調(diào) fail ?
答:小_秦
同步卡界面, 所以為什么要使用同步?
進(jìn) fail 的情況如下(根據(jù)小程序的IDE中的代碼得出):
一. 當(dāng) wx.request 被調(diào)用時(shí), 隊(duì)列已經(jīng)滿了的時(shí)候觸發(fā).
![]()
二. 當(dāng)內(nèi)部調(diào)用 checkUrl checkTLS 返回不成功時(shí)觸發(fā).
![]()
三. 默認(rèn)情況下請(qǐng)求超過 30 秒后還沒返回時(shí)觸發(fā).
![]()
后面的就不列了, 如果你需要了解,你可以查看
"C:\Program Files (x86)\Tencent\微信web開發(fā)者工具\(yùn)package.nw\app\dist\weapp\appservice\asdebug.js"
這個(gè)文件中關(guān)于 request 的源代碼.
上面的路徑可能在你那邊不太一樣, 請(qǐng)自行找到 asdebug.js.
建議不使用同步、可以使用promise配合Toast類蒙版、promise處理異步、讓異步順序等待執(zhí)行就好了
問題:
小程序setData
data: {
channelList: [{
channelName: "aaa",
channelId: "0",
resList: [{
title: 'aaa_111',
imgUrl: 'http://...',
des: 'blabla...'
},{
title: 'aaa_222',
imgUrl: 'http://...',
des: 'blabla...'
},...]
}, {
channelName: "bbb",
channelId: "12345",
resList: [{
title: 'bbb_111',
imgUrl: 'http://...',
des: 'blabla...'
},{
title: 'bbb_222',
imgUrl: 'http://...',
des: 'blabla...'
},...]
}, {
channelName: "ccc",
channelId: "4567",
resList: []
},...]
}
類似這種結(jié)構(gòu)的Data,想給channelId:12345的resList增加數(shù)據(jù),現(xiàn)在做法是:
var channelList = this.data.channelList;
for (let i = 0; i < channelList.length; i++) {
if (channelList.channelId == '12345') {
channelList.resList.concat(arr)
}
}
this.setData({
channelList:channelList
})
問題是: 1.感覺寫的復(fù)雜了,有沒有簡便的方法? 2.channelList的數(shù)據(jù)比較多,僅僅因?yàn)樾薷哪骋粋€(gè)部分,就通過setData更新了整個(gè)channelList數(shù)據(jù),會(huì)不會(huì)明顯影響性能? 答:小_秦,回答地址
你可以直接在key上寫好它的完整路徑, 然后來 setData 官方說明: https://mp.weixin.qq.com/debug/wxadoc/dev/framework/app-service/page.html
DMEO:
![]()
效果:
![]()
互動(dòng)部分:
非常感謝你的回答和demo,之前有想過這種寫法,困惑的是如何將變量寫入key。剛才嘗試了一下也解決了: this.setData({[myKey]: 'bbb'}); 這種寫法需要瀏覽器支持es6,或者是開啟es6轉(zhuǎn)es5的功能(通常情況下轉(zhuǎn)換后的代碼會(huì)有點(diǎn)長). 所以還有一種方法也可以達(dá)到效果.
var data = {};//在這里使用變量 拼接要改變的 keydata['xxx' + yyy + 'zzz'] = 'bbb'; //DEMOthis.setData(data);
問題: 微信小程序點(diǎn)擊展開,再次點(diǎn)擊收回類似這種,小白一個(gè)沒思路,求大神貼個(gè)demo給我學(xué)習(xí)一下好么 答:HaoyCn
沒有Demo, 提供思路: 小程序內(nèi)的東西都是數(shù)據(jù)驅(qū)動(dòng)的, 實(shí)現(xiàn)展開和收起也需要從數(shù)據(jù)角度考慮, 一個(gè)簡單的例子是:
<view
class="{{ 'normalClass' + (item.isExpanded ? 'collapse' : 'expand') }}"
>{{item.title}}</view>
對(duì)應(yīng)在 JS 里有 item.isExpanded 這樣一個(gè)變量來控制.
問題: 小程序 開發(fā) 只需后臺(tái)提供接口嗎 其余前端來實(shí)現(xiàn)嗎 答:joselee
是的。 微信小程序沒有HTML的常用標(biāo)簽,而是類似React的微信自定義組件,比如view、text、map等 沒有window變量,但微信提供了全局的getApp()函數(shù) 沒有a標(biāo)簽鏈接,在小程序中所有頁面的路由全部由框架進(jìn)行管理,比如wx.navigateTo、wx.redirectTo、wx.switchTab 事件綁定和條件渲染類似Angular 數(shù)據(jù)綁定采用Mustache雙大括號(hào)語法 無法操作DOM,通過改變page data(類似React的state)來改變視圖展現(xiàn) 所以如果你熟悉以上提到的所有前端技術(shù)棧,開發(fā)微信小程序你會(huì)得心應(yīng)手。