使用beforeRouteUpdate遇到的坑

最近做的某個項目有個文件預(yù)覽的需求待秃,該界面左側(cè)是文件的目錄樹,右側(cè)是預(yù)覽痹屹,預(yù)覽這部分是子路由章郁,其path/file/preview/:fileId。點擊目錄樹的文件名痢掠,右側(cè)預(yù)覽的fileId發(fā)生變化從而刷新預(yù)覽的內(nèi)容驱犹。因為預(yù)覽這塊還需要展示文件名稱等信息,所以包含文件名稱和文件id的數(shù)據(jù)是通過$routeparams傳遞過來的足画。
因用戶可能在預(yù)覽界面做刷新操作雄驹,為了防止頁面刷新丟失詳情數(shù)據(jù),筆者使用了sessionStorage來保存stringify后的詳情數(shù)據(jù)淹辞。

這樣医舆,在用戶首次進入預(yù)覽頁面時會觸發(fā)beforeRouteEnter鉤子,在此鉤子函數(shù)里象缀,sessionStorage是否有保存該fileId的詳情數(shù)據(jù)蔬将,有則直接使用,沒有的話則將to.params中的詳情數(shù)據(jù)保存到sessionStorage中央星,并將詳情數(shù)據(jù)保存在組件的data里霞怀。

當(dāng)用戶點擊目錄樹查看其他文件時,beforeRouteEnter鉤子不會觸發(fā)了莉给,而是觸發(fā)beforeRouteUpdate鉤子函數(shù)毙石,其處理邏輯同上。
這樣寫看著邏輯很清晰明了了颓遏,其主要代碼如下:

beforeRouteEnter (to, from, next) { // 首次進入此路由會觸發(fā)該鉤子函數(shù)
  next(vm => {
    if (!sessionStorage.getItem('scan_' + to.params.fileId)) {
      sessionStorage.setItem('scan_' + to.params.fileId, JSON.stringify(to.params))
    }
    vm.details = JSON.parse(sessionStorage.getItem('scan_' + to.params.fileId))
  })
},
beforeRouteUpdate (to, from, next) { // fileId發(fā)生改變時觸發(fā)此鉤子函數(shù)
  if (!sessionStorage.getItem('scan_' + to.params.fileId)) {
    sessionStorage.setItem('scan_' + to.params.fileId, JSON.stringify(to.params))
  }
  this.details = JSON.parse(sessionStorage.getItem('scan_' + to.params.fileId))
  next()
},
data () {
  return {
    details: {} // 預(yù)覽相關(guān)的詳情數(shù)據(jù)
  }
}

如果一切順利的話徐矩,筆者也不會如此大費周章來記錄這個所謂beforeRouteUpdate遇到的坑了。

當(dāng)筆者自信滿滿的點擊第一個文件預(yù)覽時叁幢,正常顯示滤灯!

OK,沒問題曼玩!

點擊第二個文件預(yù)覽鳞骤,它不顯示文件!

What is the problem?!

唉演训,遇到bug再正常不過了o(╥﹏╥)o弟孟,開始調(diào)試吧~

beforeRouteUpdate里打印details的值,發(fā)現(xiàn)其正常顯示样悟,但devtools里的details卻是空的拂募!

這就奇了怪了!

details的值被誰清空了呢窟她?

各種折騰無果后陈症,筆者突然將目光放在了data函數(shù)上,這貨定義的details的值為{}震糖,該不會是它搞的鬼吧录肯!

抱著試試看的心態(tài)分別在beforeRouteUpdatedata函數(shù)中做了標(biāo)記,發(fā)現(xiàn)data函數(shù)竟然后于beforeRouteUpdate執(zhí)行吊说。

先執(zhí)行beforeRouteUpdate论咏,再執(zhí)行data优炬。

這也就能解釋為什么無法預(yù)覽文件了。

知道原因那就好解決了厅贪,筆者將代碼改動如下:

beforeRouteEnter (to, from, next) {
  next(vm => {
    if (!sessionStorage.getItem('scan_' + to.params.fileId)) {
      sessionStorage.setItem('scan_' + to.params.fileId, JSON.stringify(to.params))
    }
    vm.details = JSON.parse(sessionStorage.getItem('scan_' + to.params.fileId))
  })
},
beforeRouteUpdate (to, from, next) {
  if (!sessionStorage.getItem('scan_' + to.params.fileId)) {
    sessionStorage.setItem('scan_' + to.params.fileId, JSON.stringify(to.params))
  }
  next()
},
data () {
  let details = sessionStorage.getItem('scan_' + this.$route.params.fileId)
  if (details) {
    details = JSON.parse(details)
  }
  return {
    details: details || {}
  }
}

這樣文件就能夠正常預(yù)覽了蠢护!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市养涮,隨后出現(xiàn)的幾起案子葵硕,更是在濱河造成了極大的恐慌,老刑警劉巖贯吓,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懈凹,死亡現(xiàn)場離奇詭異,居然都是意外死亡悄谐,警方通過查閱死者的電腦和手機介评,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尊沸,“玉大人威沫,你說我怎么就攤上這事⊥葑ǎ” “怎么了棒掠?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屁商。 經(jīng)常有香客問我烟很,道長,這世上最難降的妖魔是什么蜡镶? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任雾袱,我火速辦了婚禮,結(jié)果婚禮上官还,老公的妹妹穿的比我還像新娘芹橡。我一直安慰自己,他們只是感情好望伦,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布林说。 她就那樣靜靜地躺著,像睡著了一般屯伞。 火紅的嫁衣襯著肌膚如雪腿箩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天劣摇,我揣著相機與錄音珠移,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛钧惧,可吹牛的內(nèi)容都是我干的暇韧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浓瞪,長吁一口氣:“原來是場噩夢啊……” “哼锨咙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起追逮,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粹舵,沒想到半個月后钮孵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡眼滤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年巴席,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诅需。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡漾唉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堰塌,到底是詐尸還是另有隱情赵刑,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布场刑,位于F島的核電站般此,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏牵现。R本人自食惡果不足惜铐懊,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞎疼。 院中可真熱鬧科乎,春花似錦、人聲如沸贼急。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竿裂。三九已至玉吁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間腻异,已是汗流浹背进副。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人影斑。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓给赞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親矫户。 傳聞我的和親對象是個殘疾皇子片迅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354