欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解vue-router數(shù)據(jù)加載與緩存使用總結(jié)

 更新時(shí)間:2018年10月29日 09:21:40   作者:_west  
這篇文章主要介紹了詳解vue-router數(shù)據(jù)加載與緩存使用總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

之前開發(fā)了一個(gè)單頁(yè)面應(yīng)用,按照深度,分為三層:目錄頁(yè)、一級(jí)子頁(yè)(標(biāo)簽頁(yè)、故事頁(yè)等)、二級(jí)子頁(yè)(故事編輯頁(yè))。

這三類頁(yè)面都共享一個(gè)完整的數(shù)據(jù)model,從上級(jí)頁(yè)面進(jìn)入下一級(jí)頁(yè)面時(shí),能夠加載相應(yīng)數(shù)據(jù);回到上一級(jí)時(shí),數(shù)據(jù)有更新。舉個(gè)栗子,從故事頁(yè)點(diǎn)擊“編輯”按鈕,進(jìn)入故事編輯頁(yè)則默認(rèn)填充點(diǎn)擊的“編輯”按鈕所對(duì)應(yīng)的故事數(shù)據(jù);而當(dāng)在故事編輯頁(yè)更新數(shù)據(jù),返回到故事頁(yè)時(shí),剛剛更新的信息也能在故事頁(yè)展示。

對(duì)于這項(xiàng)需求,我們需要解決如下幾個(gè)問題:

  • 三層頁(yè)面共享數(shù)據(jù);
  • 進(jìn)入或退回當(dāng)前路由時(shí),數(shù)據(jù)更新;
  • 對(duì)于故事列表頁(yè),返回時(shí)保留之前瀏覽位置;

本文后面內(nèi)容,將對(duì)如上問題一一提出解決方案。

共享數(shù)據(jù)

多個(gè)路由共享數(shù)據(jù),可以使用vuex做數(shù)據(jù)中心,由于需求對(duì)數(shù)據(jù)處理并不復(fù)雜,為了簡(jiǎn)便就使用window全局對(duì)象作為路由間傳遞數(shù)據(jù)的工具。
核心數(shù)據(jù)我們可以設(shè)計(jì)為如下結(jié)構(gòu),以故事為例:

window.profileData = {
 storyList: [{
  content: 'xxx',
  type: 0,
  picList: [...],
 }, ...],
 description: {...}, // 其他字段數(shù)據(jù)
}

注意到,如果需要更新storyList,則應(yīng)該使用能夠被檢測(cè)到的方法,如push, splice等。

數(shù)據(jù)更新與緩存

數(shù)據(jù)更新與緩存大致有兩種方案:

第一種,利用vue-router的導(dǎo)航守衛(wèi)(見文檔:https://router.vuejs.org/zh/guide/advanced/navigation-guards.html),主要使用路由組件內(nèi)導(dǎo)航 beforeRouteEnter 和 beforeRouteLeave;

第二種,在路由組件中監(jiān)聽$route,每次路由變化就會(huì)調(diào)用其中方法加載數(shù)據(jù),需要注意的是第一次進(jìn)入路由組件$route的監(jiān)聽不會(huì)觸發(fā),我們需要在mounted方法中調(diào)用相同加載數(shù)據(jù)的方法;

我們?cè)诖a中使用的是方法一,以故事列表進(jìn)入到故事編輯頁(yè)為例,從列表傳遞index給編輯頁(yè),利用beforeRouteEnter進(jìn)入路由時(shí)就加載新的數(shù)據(jù)。

編輯頁(yè)中關(guān)鍵代碼,即加載數(shù)據(jù)、更新本地共享數(shù)據(jù):

export default {
 // 編輯頁(yè)中, 進(jìn)入路由前加載數(shù)據(jù)
 beforeRouteEnter(to, from, next) {
  next(vm => {
   const index = vm.$route.params.storyIndex
   vm.storyIndex = index
   vm.storyData = window.profile.storyList[index]
  })
 },

 methods: {
  // 提交成功后,更新本地共享數(shù)據(jù)
  submit() {
   Adapter.post('...').then(result => {
    window.profile.storyList.splice(this.storyIndex, 1, result)
   }) 
  },
 },
}

列表頁(yè)中關(guān)鍵代碼,即返回時(shí)更新數(shù)據(jù):

export default {
 beforeRouteEnter(to, from, next) {
  next(vm => {
   vm.storyList = window.profileData.storyList
  })
 },
}

這部分需要注意的有兩點(diǎn):

  • beforeRouteEnter中無法調(diào)用組件實(shí)例,因?yàn)閳?zhí)行時(shí)還在組件生命周期的beforeCreate之前,而其中的next方法是在組件mounted之后執(zhí)行,如需引用可在next方法中,引用其參數(shù),該參數(shù)就是組件實(shí)例;
  • 如果發(fā)現(xiàn)你的next方法無法執(zhí)行,請(qǐng)升級(jí)到2.6+版本,之前的版本這部分有些問題;

保留瀏覽位置

從故事編輯頁(yè)回到故事列表頁(yè),我們希望可以保存之前瀏覽的位置。思路也很簡(jiǎn)單,進(jìn)入編輯頁(yè)時(shí)保存scrollTop,返回時(shí)scrollTo即可。而且vue-router對(duì)象有屬性可以實(shí)現(xiàn)這個(gè)功能,這就簡(jiǎn)潔多了。

由于我們過渡動(dòng)畫中間,有將路由組件定位成fixed的操作,所以,動(dòng)畫結(jié)束后再手動(dòng)滾動(dòng)到目標(biāo)位置:

new VueRouter({
 routes,
 scrollBehavior (to, from, savedPosition) {
  const y = savedPosition && savedPosition.y || 0
  setTimeout(() => { window.scrollTo(0, y) }, 300)
 }
})

總結(jié)

vue-router我們?cè)谄獴端的場(chǎng)景中經(jīng)常用到,尤其是分步驟填寫表單的頁(yè)面。前期在使用過程中總是不太順暢,摸索幾次后,最終找到比較“舒適”的使用方法,索性就梳理成文。
當(dāng)然,還有其他一些特殊場(chǎng)景的用法,這里暫時(shí)不說了,等項(xiàng)目中用過后再另起一文,繼續(xù)研究。

參考文獻(xiàn)

1. 《官方文檔》
2. 《滾動(dòng)行為》

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中vxe-table虛擬滾動(dòng)列表的使用詳解

    vue中vxe-table虛擬滾動(dòng)列表的使用詳解

    vxe-table 是一個(gè)功能強(qiáng)大的 Vue 表格組件,它支持虛擬滾動(dòng)列表作為其核心功能之一,本文主要介紹一下vxe-table的虛擬滾動(dòng)列表功能的使用場(chǎng)景和優(yōu)勢(shì),感興趣的可以了解下
    2023-12-12
  • vue-router的鉤子函數(shù)用法實(shí)例分析

    vue-router的鉤子函數(shù)用法實(shí)例分析

    這篇文章主要介紹了vue-router的鉤子函數(shù)用法,結(jié)合實(shí)例形式分析了vue路由鉤子分類及vue-router鉤子函數(shù)相關(guān)使用技巧,需要的朋友可以參考下
    2019-10-10
  • vue實(shí)現(xiàn)移動(dòng)端省市區(qū)選擇

    vue實(shí)現(xiàn)移動(dòng)端省市區(qū)選擇

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)移動(dòng)端省市區(qū)選擇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • SpringBoot+Vue3實(shí)現(xiàn)上傳文件功能

    SpringBoot+Vue3實(shí)現(xiàn)上傳文件功能

    這篇文章主要介紹了SpringBoot+Vue3實(shí)現(xiàn)上傳文件功能,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 詳解Vue的列表渲染

    詳解Vue的列表渲染

    這篇文章主要為大家介紹了Vue的列表渲染,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • vue+canvas實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)從上到下刷新瀑布圖效果(類似QT的)

    vue+canvas實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)從上到下刷新瀑布圖效果(類似QT的)

    這篇文章主要介紹了vue+canvas實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)從上到下刷新瀑布圖效果(類似QT的),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 在vue中使用echarts(折線圖的demo,markline用法)

    在vue中使用echarts(折線圖的demo,markline用法)

    這篇文章主要介紹了在vue中使用echarts(折線圖的demo,markline用法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 基于vue2.0+vuex+localStorage開發(fā)的本地記事本示例

    基于vue2.0+vuex+localStorage開發(fā)的本地記事本示例

    這篇文章主要介紹了基于vue2.0+vuex+localStorage開發(fā)的本地記事本示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • vue3基于script?setup語(yǔ)法$refs的使用

    vue3基于script?setup語(yǔ)法$refs的使用

    這篇文章主要介紹了vue3基于script?setup語(yǔ)法$refs的使用,<BR>?在用vue3開發(fā)項(xiàng)目的時(shí)候,需要調(diào)用子組件的方法,于是想著用$refs來實(shí)現(xiàn),但是我是使用script?setup語(yǔ)法糖,原先vue2的語(yǔ)法已經(jīng)不適用了。下面我們一起進(jìn)入文章看詳細(xì)內(nèi)容吧</P><P>
    2021-12-12
  • 某些場(chǎng)景下建議vue query代替pinia原理解析

    某些場(chǎng)景下建議vue query代替pinia原理解析

    這篇文章主要為大家介紹了某些場(chǎng)景下建議vue-query代替pinia原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評(píng)論