(vue) keep-alive下在同一個(gè)路由下更改url

背景:

有一個(gè)容器頁面踏志,里面有兩個(gè)組件,根據(jù)容器中的data中某個(gè)值showPage可以切換展示A組件頁面/B組件頁面胀瞪,現(xiàn)在想要實(shí)現(xiàn)根據(jù)當(dāng)前頁面入口url中的參數(shù)識(shí)別默認(rèn)展示的是A組件頁面還是B組件頁面

目標(biāo)

完成背景中的需求需要達(dá)到兩個(gè)目標(biāo)针余,A/B相互跳轉(zhuǎn)時(shí)

  1. url值有更改
  2. 頁面展示有更改

解決問題的方法思路分析

1. 在query中增加參數(shù)識(shí)別,在切換A/B組件頁面展示時(shí)赏廓,獲取query并更改
const query=JSON.parse(JSON.stringify(this.$route.query))
delete query.showPage
this.$router.push({ path: this.$route.path, query })

有文章說用IsBinding有效涵紊,試了下,在keep-alive的時(shí)候還是沒有生效

const query=JSON.parse(JSON.stringify(this.$route.query))
delete query.showPage
query.IsBinding=true
this.$router.push({ path: this.$route.path, query })

存在的問題:query中的參數(shù)會(huì)一直在url中無法去除幔摸,因?yàn)?route是只讀模式,對(duì)象部分是他監(jiān)管不到的

2. 在params里增加參數(shù)

存在的問題:入口的URL都得改颤练,適合搭建頁面初期既忆,不適合后面的維護(hù)改造

3. watch監(jiān)聽路由
watch: {
    '$route.query.showPage': function(newVal, oldVal){
        console.log(newVal, oldVal);
    }
}

存在的問題:watch只能在離開頁面時(shí)才能取到oldVal的值,如果非要以此方法處理就必須要在vuex里面保存這個(gè)值,下次再進(jìn)行判斷患雇,處理比較繁瑣

4. deactivated 及 activated 配合判斷

存在問題:deactivated獲取不到this.$route.query的值

5. 給router-view設(shè)置key為路由的完整路徑
<keep-alive :include="cacheList">
    <router-view :key="$route.fullPath"></router-view>
</keep-alive>

存在問題:未生效跃脊,url仍舊未更新

6. 更改href配合data中的控制頁面展示的值showPage (最終采用)

容器中的this.showPage控制頁面展示A/B
更改href中的參數(shù),再使用location.replace改變url

存在問題苛吱,更改href中的參數(shù)或者去掉其中某一個(gè)參數(shù)需要考慮情況比較多酪术,?和&在前在后,前后是否還有其他參數(shù)翠储。以下代碼采取的方式是把url中的參數(shù)全部取出來放對(duì)象中绘雁,更改或者去除我們藥改的參數(shù),最后沖新拼接

/**
* 獲取當(dāng)前 URL 所有 GET 查詢參數(shù)
* 入?yún)ⅲ阂馕龅?URL援所,不傳則默認(rèn)為當(dāng)前 URL
* 返回:一個(gè)<key, value>參數(shù)對(duì)象
*/
// 注意庐舟,在路由#/后面的?a=1&b=2使用location.search拿不到,html后直接拼接的?a=1&b=2才可以使用location.search拿
function getUrlQueryParams(url = location.search){
    const params = {};
    const keys = url.match(/([^?&]+)(?==)/g);
    const values = url.match(/(?<==)([^&]*)/g);
    for(const index in keys){
        params[keys[index]] =  values[index];
    }
    return params;
}
 /**
* 傳入對(duì)象返回url參數(shù)
* @param {Object} data {a:1}
 * @returns {string}
 */
function  getParam(data){
     let url = '';
     for(var k in data){
         let value = data[k] !==undefined ? data[k] : '';
         url += `&${k}=${encodeURIComponent(value)}`
     }
     return url ? url.substring(1) : ''
}

// 
let urlArray = location.href.split('?')
let urlParams = getUrlQueryParams(urlArray[1])
delete urlParams.showPage
location.replace(urlArray[0] + getParam(urlParams))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末住拭,一起剝皮案震驚了整個(gè)濱河市挪略,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滔岳,老刑警劉巖杠娱,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谱煤,居然都是意外死亡摊求,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門趴俘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睹簇,“玉大人,你說我怎么就攤上這事寥闪√荩” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵疲憋,是天一觀的道長(zhǎng)凿渊。 經(jīng)常有香客問我,道長(zhǎng)缚柳,這世上最難降的妖魔是什么埃脏? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮秋忙,結(jié)果婚禮上彩掐,老公的妹妹穿的比我還像新娘。我一直安慰自己灰追,他們只是感情好堵幽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布狗超。 她就那樣靜靜地躺著,像睡著了一般朴下。 火紅的嫁衣襯著肌膚如雪努咐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天殴胧,我揣著相機(jī)與錄音渗稍,去河邊找鬼。 笑死团滥,一個(gè)胖子當(dāng)著我的面吹牛竿屹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惫撰,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼羔沙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了厨钻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤夯膀,失蹤者是張志新(化名)和其女友劉穎诗充,沒想到半個(gè)月后诱建,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俺猿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了押袍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谊惭,死狀恐怖汽馋,靈堂內(nèi)的尸體忽然破棺而出圈盔,到底是詐尸還是另有隱情,我是刑警寧澤驱敲,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站众眨,受9級(jí)特大地震影響木缝,放射性物質(zhì)發(fā)生泄漏围辙。R本人自食惡果不足惜我碟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姚建。 院中可真熱鬧矫俺,春花似錦、人聲如沸掸冤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稿湿。三九已至铅匹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饺藤,已是汗流浹背包斑。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涕俗,地道東北人罗丰。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像再姑,于是被迫代替她去往敵國(guó)和親萌抵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容