小程序模板網(wǎng)

sf問答精選《三》點(diǎn)擊展開再次點(diǎn)擊收回,setData

發(fā)布時(shí)間:2017-11-22 17:37 所屬欄目:小程序開發(fā)文檔

本文內(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ā). 
1.png 
二. 當(dāng)內(nèi)部調(diào)用 checkUrl checkTLS 返回不成功時(shí)觸發(fā). 
2.png 
三. 默認(rèn)情況下請(qǐng)求超過 30 秒后還沒返回時(shí)觸發(fā). 
3.png2909156502-58a189185bd74_articlex.png4.png 
后面的就不列了, 如果你需要了解,你可以查看 
"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

 

		
  1. data: {
  2.  
  3. channelList: [{
  4.  
  5. channelName: "aaa",
  6.  
  7. channelId: "0",
  8.  
  9. resList: [{
  10.  
  11. title: 'aaa_111',
  12.  
  13. imgUrl: 'http://...',
  14.  
  15. des: 'blabla...'
  16.  
  17. },{
  18.  
  19. title: 'aaa_222',
  20.  
  21. imgUrl: 'http://...',
  22.  
  23. des: 'blabla...'
  24.  
  25. },...]
  26.  
  27. }, {
  28.  
  29. channelName: "bbb",
  30.  
  31. channelId: "12345",
  32.  
  33. resList: [{
  34.  
  35. title: 'bbb_111',
  36.  
  37. imgUrl: 'http://...',
  38.  
  39. des: 'blabla...'
  40.  
  41. },{
  42.  
  43. title: 'bbb_222',
  44.  
  45. imgUrl: 'http://...',
  46.  
  47. des: 'blabla...'
  48.  
  49. },...]
  50.  
  51. }, {
  52.  
  53. channelName: "ccc",
  54.  
  55. channelId: "4567",
  56.  
  57. resList: []
  58.  
  59. },...]
  60.  
  61. }

類似這種結(jié)構(gòu)的Data,想給channelId:12345的resList增加數(shù)據(jù),現(xiàn)在做法是:

 

		
  1. var channelList = this.data.channelList;
  2.  
  3. for (let i = 0; i < channelList.length; i++) {
  4.  
  5. if (channelList.channelId == '12345') {
  6.  
  7. channelList.resList.concat(arr)
  8.  
  9. }
  10.  
  11. }
  12.  
  13. this.setData({
  14.  
  15. channelList:channelList
  16.  
  17. })

問題是:  1.感覺寫的復(fù)雜了,有沒有簡便的方法?  2.channelList的數(shù)據(jù)比較多,僅僅因?yàn)樾薷哪骋粋€(gè)部分,就通過setData更新了整個(gè)channelList數(shù)據(jù),會(huì)不會(huì)明顯影響性能?  11.png  答:小_秦,回答地址

你可以直接在key上寫好它的完整路徑, 然后來 setData  官方說明:  https://mp.weixin.qq.com/debug/wxadoc/dev/framework/app-service/page.html  12.png  DMEO:  13.png  14.png效果:  15.png  16.png

互動(dòng)部分:

非常感謝你的回答和demo,之前有想過這種寫法,困惑的是如何將變量寫入key。剛才嘗試了一下也解決了:  this.setData({[myKey]: 'bbb'});  這種寫法需要瀏覽器支持es6,或者是開啟es6轉(zhuǎn)es5的功能(通常情況下轉(zhuǎn)換后的代碼會(huì)有點(diǎn)長).  所以還有一種方法也可以達(dá)到效果.

 

		
  1. var data = {};//在這里使用變量 拼接要改變的 keydata['xxx' + yyy + 'zzz'] = 'bbb'; //DEMOthis.setData(data);

問題:  微信小程序點(diǎn)擊展開,再次點(diǎn)擊收回類似這種,小白一個(gè)沒思路,求大神貼個(gè)demo給我學(xué)習(xí)一下好么  20.png答:HaoyCn

沒有Demo, 提供思路:  小程序內(nèi)的東西都是數(shù)據(jù)驅(qū)動(dòng)的, 實(shí)現(xiàn)展開和收起也需要從數(shù)據(jù)角度考慮, 一個(gè)簡單的例子是:

 

		
  1. <view
  2.  
  3. class="{{ 'normalClass' + (item.isExpanded ? 'collapse' : 'expand') }}"
  4.  
  5. >{{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)手。



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.u-renovate.com/wxmini/doc/develop/17901.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×