本文內(nèi)所有問答,均選自sf.gg網(wǎng)站內(nèi)相關(guān)問答; 問題: 微信小程序怎么做 RSA 加密? 之前在網(wǎng)頁端 RSA 加密密碼用的 JSEncrypt現(xiàn)在要移植到微信小程序,由于 JSEncrypt 會使用到 window 對象,所以無法在小程序中使用 ...
本文內(nèi)所有問答,均選自sf.gg網(wǎng)站內(nèi)相關(guān)問答;
問題:
微信小程序怎么做 RSA 加密?
之前在網(wǎng)頁端 RSA 加密密碼用的 JSEncrypt
現(xiàn)在要移植到微信小程序,由于 JSEncrypt 會使用到 window 對象,所以無法在小程序中使用。
(微信小程序的)頁面的腳本邏輯是在JsCore中運行,JsCore是一個沒有窗口對象的環(huán)境,所以不能在腳本中使用window,也無法在腳本中操作組件。
有人遇到過這樣的需求或者問題么?
答:color_cat
加密怎么會和window對象扯上關(guān)系,我用的rsa是這個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個問題與1個吐槽
吐槽:wx.request 沒有async屬性,不支持同步請求,坑。
問題:wx.request 發(fā)出請求后,無論請求接口返回的 HTTP 狀態(tài)碼(200,500)是什么,都會進(jìn)入 success 回調(diào),什么時候會回調(diào) fail ?
答:小_秦
同步卡界面, 所以為什么要使用同步?
進(jìn) fail 的情況如下(根據(jù)小程序的IDE中的代碼得出):
一. 當(dāng) wx.request 被調(diào)用時, 隊列已經(jīng)滿了的時候觸發(fā).
![]()
二. 當(dāng)內(nèi)部調(diào)用 checkUrl checkTLS 返回不成功時觸發(fā).
![]()
三. 默認(rèn)情況下請求超過 30 秒后還沒返回時觸發(fā).
![]()
后面的就不列了, 如果你需要了解,你可以查看
"C:\Program Files (x86)\Tencent\微信web開發(fā)者工具\package.nw\app\dist\weapp\appservice\asdebug.js"
這個文件中關(guān)于 request 的源代碼.
上面的路徑可能在你那邊不太一樣, 請自行找到 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ù)比較多,僅僅因為修改某一個部分,就通過setData更新了整個channelList數(shù)據(jù),會不會明顯影響性能?
答:小_秦,回答地址
你可以直接在key上寫好它的完整路徑, 然后來 setData 官方說明: https://mp.weixin.qq.com/debug/wxadoc/dev/framework/app-service/page.html
DMEO:
![]()
效果:
![]()
互動部分:
非常感謝你的回答和demo,之前有想過這種寫法,困惑的是如何將變量寫入key。剛才嘗試了一下也解決了: this.setData({[myKey]: 'bbb'}); 這種寫法需要瀏覽器支持es6,或者是開啟es6轉(zhuǎn)es5的功能(通常情況下轉(zhuǎn)換后的代碼會有點長). 所以還有一種方法也可以達(dá)到效果.
var data = {};//在這里使用變量 拼接要改變的 keydata['xxx' + yyy + 'zzz'] = 'bbb'; //DEMOthis.setData(data);
問題: 微信小程序點擊展開,再次點擊收回類似這種,小白一個沒思路,求大神貼個demo給我學(xué)習(xí)一下好么
答:HaoyCn
沒有Demo, 提供思路: 小程序內(nèi)的東西都是數(shù)據(jù)驅(qū)動的, 實現(xiàn)展開和收起也需要從數(shù)據(jù)角度考慮, 一個簡單的例子是:
<viewclass="{{ 'normalClass' + (item.isExpanded ? 'collapse' : 'expand') }}">{{item.title}}</view>對應(yīng)在 JS 里有 item.isExpanded 這樣一個變量來控制.
問題: 小程序 開發(fā) 只需后臺提供接口嗎 其余前端來實現(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雙大括號語法 無法操作DOM,通過改變page data(類似React的state)來改變視圖展現(xiàn) 所以如果你熟悉以上提到的所有前端技術(shù)棧,開發(fā)微信小程序你會得心應(yīng)手。