小程式九九八十一坑之跳轉傳參

来源:https://www.cnblogs.com/msunh/archive/2019/09/22/11566615.html
-Advertisement-
Play Games

垂死病中驚坐起,笑問 Bug 何處來?! 1、先是大寫字母作祟 前兩天發佈了「柒留言」v2.0.0 新版本,結果...你懂的嘛,沒有 Bug 的程式不是好程式,寫不出 Bug 的程式員不是好程式員。 那個,有一兩個小 Bug 很正常的啦。 有用戶反饋,收到了留言回覆的通知,但是點進去沒有內容。怎麼會 ...


垂死病中驚坐起,笑問 Bug 何處來?!

1、先是大寫字母作祟

前兩天發佈了「柒留言」v2.0.0 新版本,結果...你懂的嘛,沒有 Bug 的程式不是好程式,寫不出 Bug 的程式員不是好程式員。

那個,有一兩個小 Bug 很正常的啦。

有用戶反饋,收到了留言回覆的通知,但是點進去沒有內容。怎麼會有 Bug 呢?肯定是你用的方法不對。

下班回到家的我立馬打開開發者工具,一測試發現,果然,我是不可能寫不出 Bug 的。

寫 Bug 是一把好手,找 Bug 我也是不賴的,最後原因定位:參數沒有正確傳遞。

 

A 頁面
// a.wxml
<view data-testID="test" data-openid="msunh" bindtap="toB">B</view>

// a.js
toB(e) {
  var i = e.currentTarget.dataset;
  wx.navigateTo({
    url: '/pages/b?testID=' + i.testID + '&openid=' + i.openid,
  })
  console.log(i)
}
B 頁面
// b.js
onLoad: function (options) {
  this.setData({
    testID: options.testID,
    openid: options.openid
  })
}

結果是:

很明顯,openid 獲得了正確參數,說明接收和傳遞過程毛問題,那就是傳遞之前 testID 就出錯了。

控制台列印一下 dataset,發現沒有, testID 變成了 testid。

這說明瞭什麼?說明他在搞事情,他在搞我!這裡把 testID 改成 testid,就能正確傳遞了。

數據綁定不能用大寫,記住啊,兄die。(或者可以用大寫綁定,小寫獲取,開心就好呀)

2、連一個 ? 都敢搞我?

改完 Bug 想著可以休息會,結果大半夜又有人找:回覆讀者失敗了。

我試了一下,沒發現他說的問題。便回覆道:刷新一下?多試兩次?換個網路?應該不是我這邊的問題吧...

過了一會,這個老哥說還是不行,然後這個老哥大半夜還和我一起來找 Bug 了,感動,找到 Bug 我還特地發了個紅包感謝。

最後發現數據在一個問號那裡斷開了,前面數據正常,後面數據被截斷。仔細看下是因為用戶輸入了一個英文「?」??????

做個測試:

 

A 頁面
// a.wxml
<view data-hello="你最近怎麼樣?我很好" bindtap="toB">toB</view>
// a.js
toB(e) {
  var i = e.currentTarget.dataset;
  wx.navigateTo({
    url: '/pages/b?hello=' + i.hello,
  })
}
B 頁面
// b.js
onLoad: function (options) {
  this.setData({
    hello: options.hello,
  })
}

結果 AppData 中是這樣的:

果然是英文問號惹的麻煩,腦殼疼,連個「?」都來找麻煩,我好南南南南南南啊。


3、盤他

找到問題了就盤他,但這不能怪用戶,鬼知道什麼時候就輸入了一個「?」。因為跳轉路徑中加參數也是用的「?」,所以這裡應該是被誤「?」後面帶參。

最後我想了兩種方法,這裡供大家參考一下,如果有更好的方法,歡迎留言一起討論。

I. 跳轉頁面的時候把 dataset 的數據寫入緩存,到了新頁面再讀取緩存,這裡就不啰嗦了,關鍵是第二種。

II. 利用 replace 把 ? 轉化成 ?

但是這裡有個問題,用  replace('?', '?') 的話,只能轉化一次。

如果輸入了多個英文問號呢?不排除這種可能,所以不建議用  replace('?', '?') ,推薦加入正則表達式,即 replace(/\?/g, "?") 去轉化英文問號。

 

4、最後

柒塊腹肌的玖柒回來了,有段時間沒更新了,一直在忙著重寫小程式,主要是我還沒有想到更好的藉口。

今年還有 101 天,我會努力爬上來更新的,點擊下方「寫留言」一起討論呀,分享、討論才是更好的學習方式,搖起來。

本文首發於公眾號「我是玖柒後」,一起來踩坑吧!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 垃圾分類助手-生活的好幫手的技術支持,如果您使用中出現什麼問題或者對我們產品有什麼改進建議,請隨時與我聯繫。 電話:15990075212 郵箱:[email protected] 應用簡介 垃圾分類小助手-生活的好幫手能夠快速搜索垃圾分類,高效率識別垃圾分類,輕鬆解決垃圾分類難題 ...
  • Vue以前聽說過,有瞭解過一點。當時還在熱衷於原生JavaScript去寫一些方法的封裝,不是為啥,就感覺這樣很帥,後面多多少少接觸了一些JQuery的用法,到現在為止,JavaScript原生封裝的一些方法,該忘的都忘了。上一家公司需要用到Vue,所以就利用下班的時候學習Vue。有次公司部門的培訓 ...
  • 點擊導航菜單,切換選中狀態 效果: 思路:首先獲取選中的URL,再通過正則判斷是否相同,相同就加上相應的屬性,不相同就去除相應的屬性。 html代碼 JQ代碼 ...
  • 先上完成的效果圖:列是根據查詢結果增加的 數據格式: 表頭的數據取出: element table中: 表格內數據整理: 左側表頭合併:需要註意的是,當有固定列的時候需要設置表格的max-height屬性,不然會出現列空白 <el-table :data="tableData" span-metho ...
  • 一.vue基礎 "Vue的介紹及安裝和導入" "Vue的使用" "Vue成員獲取" "Vue中的迴圈以及修改差值表達式" "vue中methods,computed,filters,watch的總結" "Vue中組件" "Vue中插槽指令" "Vue部分編譯不生效,解決Vue渲染時候會閃一下" 二. ...
  • 1、絕對定位 絕對定位指的是通過規定HTML元素在水平和垂直方向上的位置來固定元素,基於絕對定位的元素不會占據空間。 絕對定位的位置聲明是相對於已定位的並且包含關係最近的祖先元素。如果當前需要被定為的元素沒有已定位的祖先元素作為參考值,則相對於整個網頁。 position:absolute; 1 < ...
  • 水平居中(包含塊中居中)1. 定寬,左右margin為auto。(常規流塊盒、彈性項目[不用定寬]) 例子:在box1盒子上設置寬,再設置margin:auto; 得到的效果: 2. 彈性盒設置justify-content: center,讓彈性項目在主軸上居中。(普遍適應) 例子:在其父元素上設 ...
  • 一、HTMLhtyper text markup language 即超文本標記語言超文本: 就是指頁面內可以包含圖片、鏈接,甚至音樂、程式等非文字元素。標記語言: 標記(標簽)構成的語言.網頁==HTML文檔,由瀏覽器解析,用來展示的靜態網頁:靜態的資源,如xxx.html 動態網頁:html代碼... ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...