免费国产欧美国日产_少妇AV一区二区三区无码_蜜桃精品av无码喷奶水小说_jk18禁网站视频_精产国品一二三级产品区别_被夫の上司に犯波多野结衣_78m成人手机免费看_最爽最刺激18禁视频_偷偷色噜狠狠狠狠的777米奇

易優(yōu)GEO 重磅上線 ~ 一站式GEO優(yōu)化工具,讓豆包、文心一言、DeepSeek 在回答中主動(dòng)推薦你的品牌,搶占AI流量入口!  點(diǎn)擊查看

小程序模板網(wǎng)

小程序踩坑記《三》復(fù)雜數(shù)據(jù)的傳遞,長(zhǎng)按與點(diǎn)擊事件沖突

發(fā)布時(shí)間:2017-11-29 18:08 所屬欄目:小程序開發(fā)教程

一:復(fù)雜數(shù)據(jù)的傳遞頁面跳轉(zhuǎn)進(jìn)行數(shù)據(jù)傳遞是一個(gè)必不可少的功能,有很多應(yīng)用場(chǎng)景需要使用比如買商品的流程是“選擇商品” - “購(gòu)物車” - “物流信息” - “確認(rèn)訂單”,所以在這幾個(gè)不同 ...

 
 
 

一:復(fù)雜數(shù)據(jù)的傳遞

頁面跳轉(zhuǎn)進(jìn)行數(shù)據(jù)傳遞是一個(gè)必不可少的功能,有很多應(yīng)用場(chǎng)景需要使用

比如買商品的流程是“選擇商品” -> “購(gòu)物車” -> “物流信息” -> “確認(rèn)訂單”,所以在這幾個(gè)不同頁面進(jìn)行跳轉(zhuǎn)的時(shí)候,相應(yīng)的數(shù)據(jù)也需要傳遞下去

在android中,我們可以用Intent 來進(jìn)行數(shù)據(jù)的傳遞,新界面通過getIntent來進(jìn)行獲取

在IOS中,一般是通過controller 的屬性來進(jìn)行傳值

在React-Native中,可以在navigator.push 方法傳遞對(duì)象

上面三種進(jìn)行數(shù)據(jù)的傳遞都很簡(jiǎn)單,而且也很方法。

而在小程序中,我們可以看到,頁面跳轉(zhuǎn)和傳遞數(shù)據(jù)是通過

代碼實(shí)現(xiàn)

 

			
  1. wx.navigateTo({
  2. url: 'page?a=1&b=2',
  3. success: function (res) {
  4. // success
  5.  
  6. },
  7. fail: function (err) {
  8. // fail
  9. },
  10. complete: function () {
  11. // complete
  12. }
  13. });

他是通過url字段來控制跳轉(zhuǎn)的頁面,同時(shí)路徑“?”后面的表示傳遞的參數(shù),這跟http的GET請(qǐng)求傳參一致

在新頁面獲取參數(shù)信息也很簡(jiǎn)單

 

			
  1. Page({
  2. data: {},
  3. onLoad: function(options) {
  4. console.log(options)
  5. }
  6. });

可以直接在每個(gè)頁面的onLoad 回調(diào)中來進(jìn)行獲取。

看了上面的代碼,你會(huì)疑問這不是很簡(jiǎn)單嗎?還需要你來說嗎??jī)删浯a搞定的事

確實(shí),如果你只是做簡(jiǎn)單的數(shù)據(jù)傳遞是很簡(jiǎn)單

但是,回到最上面說的那個(gè)問題,如果頁面層級(jí)比較多,數(shù)據(jù)比較多且復(fù)雜的時(shí)候,你會(huì)抓狂,因?yàn)閣x.navigateTo 的url自動(dòng)是String類型,也就是說你不能直接傳遞對(duì)象,如果數(shù)據(jù)很多的話,會(huì)是一件很痛苦的事

 

			
  1. wx.navigateTo({
  2. url: "page?productId=1&count=2&name=zhangzy&phone=13488888888&address=xxx"
  3. });

代碼可讀性極差而且非常繁瑣,萬一那個(gè)字段忘記拼進(jìn)去,很容易出bug

所以,我們必須要做改變,需要優(yōu)化

結(jié)合上篇文章《返回上級(jí)頁面并傳遞數(shù)據(jù)》封裝另外一個(gè)大同小異的方法

 

			
  1. class Router {
  2.  
  3. navigateTo(obj) {
  4. wx.navigateTo({
  5. url: obj.url,
  6. success: function (res) {
  7. // success
  8. obj.success && obj.success(res);
  9. if (obj.data) {
  10. setTimeout(() => {
  11. let pages = getCurrentPages()
  12. let curPage = pages[pages.length - 1];
  13. if(curPage.startPageForData) {
  14. curPage.startPageForData(obj.data);
  15. } else {
  16. curPage.setData(obj.data);
  17. }
  18. }, 1000);
  19.  
  20. }
  21. },
  22. fail: function (err) {
  23. // fail
  24. obj.fail && obj.fail(res);
  25. },
  26. complete: function () {
  27. // complete
  28. obj.complete && obj.complete();
  29. }
  30. });
  31.  
  32. }
  33. }
  34.  
  35. Router = new Router();
  36. module.exports = Router;

實(shí)際上還是基于微信提供的wx.navigateTo接口,在跳轉(zhuǎn)成功之后,我們獲取頁面棧里面最上層的一個(gè),也就是最新打開的那個(gè)頁面,從而進(jìn)行數(shù)據(jù)綁定或是執(zhí)行對(duì)應(yīng)的startPageForData方法,上面我們加了1000毫秒的延時(shí),主要是當(dāng)頁面跳轉(zhuǎn)之后,可能沒那么快注冊(cè)的棧里面,不延時(shí)可能獲取的還是之前頁面數(shù)



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