最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue利用History記錄上一頁(yè)面的數(shù)據(jù)方法實(shí)例

 更新時(shí)間:2018年11月02日 15:38:26   作者:風(fēng)清袖一  
這篇文章主要給大家介紹了關(guān)于Vue利用History記錄上一頁(yè)面的數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

本文主要介紹的是Vue利用History記錄上一頁(yè)面數(shù)據(jù)的相關(guān)內(nèi)容,vue使用history后,能夠使得url更加漂亮,也就是不再有‘#'的問(wèn)題,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧

UI

需求

從列表頁(yè)的第二頁(yè)進(jìn)入詳情頁(yè),返回時(shí)列表頁(yè)仍然顯示在第二頁(yè);

從列表頁(yè)的第二頁(yè)進(jìn)入詳情頁(yè),返回時(shí)列表頁(yè)的篩選條件仍然存在。

<!--more-->

技術(shù)選擇

  • 使用vue-router組件,通過(guò)this.$router.push({path: path, query: query});方式,將頁(yè)碼和選擇條件作為參數(shù)存儲(chǔ)在url中,這種方式在上面的UI設(shè)計(jì)中是可行的,但是當(dāng)列表頁(yè)中包含tab組件時(shí)(分頁(yè)組件是公用的),會(huì)因?yàn)閜ush的因素(因?yàn)閜ush會(huì)打開(kāi)新頁(yè)面)導(dǎo)致一些問(wèn)題(PS:也可能是本人技術(shù)能力的原因),未實(shí)現(xiàn)。
  • 使用History API(HTML5開(kāi)始支持),通過(guò)history.replaceState方式,將頁(yè)碼作為參數(shù)存儲(chǔ)在url中,將選擇條件存儲(chǔ)在history中(尚不清楚數(shù)據(jù)具體是存儲(chǔ)在哪里);通過(guò)location.hash方式獲取頁(yè)碼;通過(guò)history.state方式獲取存儲(chǔ)的選擇條件。

具體實(shí)現(xiàn)--技術(shù)選擇2

開(kāi)關(guān)

為分頁(yè)組件添加一個(gè)開(kāi)關(guān)(openroute),因?yàn)樾枰叶壬暇€,萬(wàn)一有問(wèn)題,要調(diào)整的頁(yè)面也只有一個(gè)。代碼如下:

<script>
 export default {
 props: {
 openroute: {
 type: Boolean,
 default: () => (true)
 }
 },
 }
</script>

分頁(yè)組件中存儲(chǔ)頁(yè)碼和選擇條件&獲取頁(yè)碼

<script>
 export default {
 methods: {
 fetchData(page) {
 //請(qǐng)求參數(shù)
 let params = this.params;
 //請(qǐng)求頁(yè)碼
 let newPage;
 //openroute處理
 if (this.openroute) {
 //為url添上#page
 if (page) {
 history.replaceState(params.data, document.title, "#" + page);
 } else {
 if (history.state) {
 if (!history.state.key && location.hash && location.hash.split("#") && location.hash.split("#")[1]) {
 if (JSON.stringify(history.state) !== JSON.stringify(params.data)) { //選擇條件變更則請(qǐng)求第一頁(yè)
  history.replaceState(params.data, document.title, "#1");
 } else {
  history.replaceState(params.data, document.title, "#" + location.hash.split("#")[1]);
 }
 } else {
 history.replaceState(params.data, document.title, "#1");
 }
 } else {
 if (location.hash && location.hash.split("#") && location.hash.split("#")[1]) {
 history.replaceState(params.data, document.title, "#" + location.hash.split("#")[1]);
 } else {
 history.replaceState(params.data, document.title, "#1");
 }
 }
 }
 //獲取url后面的#page
 if (location.hash && location.hash.split("#") && location.hash.split("#")[1]) {
 newPage = Number(location.hash.split("#")[1]);
 } else {
 newPage = 1;
 }
 } else {
 newPage = page;
 }
 //請(qǐng)求數(shù)據(jù),獲得結(jié)果,傳遞給列表頁(yè)面
 }
 }
 }
</script>

列表頁(yè)面獲取選擇條件

目前可能是因?yàn)榭蚣茉O(shè)計(jì)的問(wèn)題,沒(méi)法在請(qǐng)求數(shù)據(jù)之前通過(guò)Object.assign方式為替換初始變量,所以先這樣處理(笨方法,各位大佬有解決辦法麻煩指導(dǎo)下,謝謝):

<script>
 export default {
 data() {
 return {
 form: {
 aaa: (history.state && history.state.aaa) ? history.state.aaa : null,
 bbb: (history.state && history.state.bbb) ? history.state.bbb : null,
 ccc: (history.state && history.state.ccc) ? history.state.ccc : null
 },
 };
 }
 };
</script>

已解決,初始變量不需要?jiǎng)樱梢酝ㄟ^(guò)以下方式實(shí)現(xiàn):

created(){
 //獲取緩存的數(shù)據(jù)
 if (history.state) {
 Object.assign(this.form, history.state)
 if (this.form.key) {
 delete this.form.key
 }
 }
},

這里記錄下:之前以為created方法是在分頁(yè)組件的watch監(jiān)聽(tīng)之后執(zhí)行的,后來(lái)發(fā)現(xiàn)被誤導(dǎo)了(因?yàn)橹笆峭ㄟ^(guò)Object.assign(true, this.form, history.state)方式實(shí)現(xiàn)數(shù)據(jù)賦值的,但是并沒(méi)有成功)。下面做個(gè)小總結(jié):

Object.assign(true, a, b);”和“Object.assign(a, b);”有什么區(qū)別?

結(jié)論:前者:改a不影響b;后者:改a影響b

分析(這篇文章有源碼分析( <font color='red'>求解答:WebStorm中如何關(guān)聯(lián)源碼?</font>),很棒):

www.fzitv.net/article/150037.htm...

FAQ

  • 需要使用history.replaceState方式是因?yàn)椋核粫?huì)將更改后的url壓到history棧中,所以不會(huì)增加回退和前進(jìn)的操作步數(shù);
  • 使用history.replaceState方式,可存儲(chǔ)的state大小不能操作640k;
  • 可能存在瀏覽器兼容性問(wèn)題,請(qǐng)從此處查閱:https://caniuse.com/#feat=his...。

Demo Or Source

因?yàn)槭枪卷?xiàng)目,所以目前沒(méi)有Demo或源碼

參考文章

Manipulating the browser history

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 基于el-table實(shí)現(xiàn)行內(nèi)增刪改功能

    基于el-table實(shí)現(xiàn)行內(nèi)增刪改功能

    這篇文章主要介紹了基于el-table實(shí)現(xiàn)行內(nèi)增刪改功能,用過(guò)通過(guò)操作按鈕點(diǎn)擊刪除或者編輯功能即可實(shí)現(xiàn)相應(yīng)的效果,下面小編給大家分享實(shí)例代碼感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • el-table表格動(dòng)態(tài)合并相同數(shù)據(jù)單元格(可指定列+自定義合并)

    el-table表格動(dòng)態(tài)合并相同數(shù)據(jù)單元格(可指定列+自定義合并)

    工作時(shí)遇到的el-table合并單元格的需求,本文主要介紹了el-table表格動(dòng)態(tài)合并相同數(shù)據(jù)單元格(可指定列+自定義合并),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Vue項(xiàng)目引入translate.js國(guó)際化自動(dòng)翻譯組件的方法

    Vue項(xiàng)目引入translate.js國(guó)際化自動(dòng)翻譯組件的方法

    這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目引入translate.js國(guó)際化自動(dòng)翻譯組件的相關(guān)資料,除了基本的文本翻譯功能之外,jstranslate還提供了一些高級(jí)功能,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 實(shí)現(xiàn)vue圖片縮放方式-拖拽組件

    實(shí)現(xiàn)vue圖片縮放方式-拖拽組件

    這篇文章主要介紹了實(shí)現(xiàn)vue圖片縮放方式-拖拽組件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue實(shí)現(xiàn)騰訊云點(diǎn)播視頻上傳功能的實(shí)現(xiàn)代碼

    Vue實(shí)現(xiàn)騰訊云點(diǎn)播視頻上傳功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Vue實(shí)現(xiàn)騰訊云點(diǎn)播視頻上傳功能的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • vue3+element-plus暗黑模式切換動(dòng)畫圓弧過(guò)渡效果

    vue3+element-plus暗黑模式切換動(dòng)畫圓弧過(guò)渡效果

    文章介紹了如何在Vue 3和Element Plus中實(shí)現(xiàn)暗黑模式的切換,并通過(guò)動(dòng)畫和圓弧過(guò)渡效果提升用戶體驗(yàn),本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-01-01
  • 詳解如何使用webpack打包Vue工程

    詳解如何使用webpack打包Vue工程

    本篇文章主要介紹了詳解如何使用webpack打包Vue工程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Vue中this.$router和this.$route的區(qū)別及push()方法

    Vue中this.$router和this.$route的區(qū)別及push()方法

    這篇文章主要給大家介紹了關(guān)于Vue中this.$router和this.$route的區(qū)別及push()方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 一文讀懂vue動(dòng)態(tài)屬性數(shù)據(jù)綁定(v-bind指令)

    一文讀懂vue動(dòng)態(tài)屬性數(shù)據(jù)綁定(v-bind指令)

    這篇文章主要介紹了vue動(dòng)態(tài)屬性數(shù)據(jù)綁定(v-bind指令)的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Vue3除了keep-alive還有哪些實(shí)現(xiàn)頁(yè)面緩存詳解

    Vue3除了keep-alive還有哪些實(shí)現(xiàn)頁(yè)面緩存詳解

    Vue3中的keep-alive組件用于緩存頁(yè)面,以便在切換頁(yè)面時(shí)保留其狀態(tài),下面這篇文章主要給大家介紹了關(guān)于Vue3除了keep-alive還有哪些實(shí)現(xiàn)頁(yè)面緩存的相關(guān)資料,需要的朋友可以參考下
    2024-04-04

最新評(píng)論

云林县| 禹州市| 通城县| 南皮县| 三都| 札达县| 甘肃省| 通州市| 隆子县| 司法| 潍坊市| 西宁市| 阳新县| 安达市| 汶上县| 阜新市| 永丰县| 建瓯市| 分宜县| 盘山县| 大埔区| 长海县| 读书| 黔东| 昌吉市| 上饶市| 吉林省| 涞水县| 通化市| 宜兰县| 航空| 邓州市| 武汉市| 尚义县| 岳阳市| 陆良县| 玉环县| 杨浦区| 阳高县| 盐亭县| 股票|