【Vue】Vue實現(xiàn)無痕刷新

一、什么是無痕刷新

在不刷新瀏覽器的情況下,實現(xiàn)頁面的刷新。

傳統(tǒng)的刷新頁面方式

window.location.reload()原生 js 提供的方法

this.$router.go(0)vue 路由里面的一種方法

這兩種方法都可以達到頁面刷新的目的,簡單粗暴,但是用戶體驗不好,相當于按 F5 刷新頁面,頁面的重新載入,會有短暫的白屏


二、實現(xiàn)無痕刷新

先在全局組件注冊一個方法,用該方法控制 router-view 的顯示與否,然后在子組件調(diào)用;

v-if 控制 <router-view></router-view> 的顯示;

provide:全局注冊方法;

inject:子組件引用 provide 注冊的方法

APP.vue

<template>
?<div>
? ?<router-viewv-if="isShow"></router-view>
?</div>
</template>
<script>
exportdefault{
?name:"App",
?provide(){
? ?return{
? ? ?reload:this.pageReload
? }
},
?data(){
? ?return{
? ? ?isShow:true
? }
},
?methods:{
? ?//刷新
? ?pageReload(){
? ? ?this.isShow=false;
? ? ?this.$nextTick(()=>{
? ? ? ?this.isShow=true;
? ? })
? }
}
};
</script>

需要進行無痕刷新的頁面

<template>
? ?<div>
? ? ? ?<button@click="handleReload()">點擊刷新</button>
? ?</div>
</template>

<script>
exportdefault{
? ?name:"Home",
? ?inject:["reload"],
? ?methods:{
? ? ? ?handleReload(){
? ? ? ? ? ?this.reload()
? ? ? }
? },
? ?created(){
? ? ? ?console.log(111)
? }
}
</script>

三、provide/inject的使用

簡單的來說就是在父組件中通過provider來提供變量,然后在子組件中通過inject來注入變量(這種方式也可以實現(xiàn)組件傳值,父傳子),provide / inject這對選項需要一起使用,以允許一個祖先組件向其所有子孫后代注入一個依賴,不論組件層次有多深,并在起上下游關(guān)系成立的時間里始終生效。這個東西很類似于React中的context,實現(xiàn)跨組件傳值

  • provide 選項應(yīng)該是:一個對象或返回一個對象的函數(shù)

  • inject 選項應(yīng)該是:一個字符串數(shù)組,或 一個對象,對象的 key 是本地的綁定名

provide

//返回一個對象的函數(shù)
<template>
?<div></div>
</template>
<script>
exportdefault{
?name:?"App",
?provide() {
? ?return{
? ? ?title:?"alley"
? };
}
};
</script>

//一個對象
<template>
?<div></div>
</template>
<script>
exportdefault{
?name:?"App",
?provide:{
? ?title:"Alley"
}
?
};
</script>

inject

//一個字符串數(shù)組
<template>
? ?<div>
? ? ? ?<h2>{{title}}</h2>
? ?</div>
</template>

<script>
exportdefault{
? ?name:"Home",
? ?inject:["title"],
}
</script>


//一個對象
<template>
? ?<div>
? ? ? ?<h2>{{title}}</h2>
? ?</div>
</template>

<script>
exportdefault{
? ?name:"Home",
? ?inject:{
? ? ? ?title:{
? ? ? ? ? ?type:String,
? ? ? ? ? ?default:"巷子"
? ? ? }
? },
}
</script>



·END·
?


溫馨提示

如果你喜歡本文,請分享到朋友圈,想要獲得更多信息,請關(guān)注我。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 準備工作 一、安裝腳手架 1、安裝vue腳手架,這是構(gòu)建vue項目的工具-g為全局安裝? npm insta...
    不困于情閱讀 2,347評論 0 3
  • 前言 組件是 vue.js最強大的功能之一,而組件實例的作用域是相互獨立的,這就意味著不同組件之間的數(shù)據(jù)無法相互引...
    用技術(shù)改變世界閱讀 2,299評論 1 3
  • Vue八個生命周期 beforeCreate【創(chuàng)建前】created【創(chuàng)建后】 beforeMount【載入前】 ...
    艾薩克菊花閱讀 1,433評論 0 12
  • SPA單頁應(yīng)用 傳統(tǒng)的項目大多使用多頁面結(jié)構(gòu),需要切換內(nèi)容的時候我們往往會進行單個html文件的跳轉(zhuǎn),這個時候受網(wǎng)...
    視覺派Pie閱讀 12,180評論 1 55
  • 子曰:“述而不作,信而好古,竊比于我老彭?!? 【譯】孔子說:“只傳述而不創(chuàng)作,相信并喜好古代文獻,我私底下把自...
    水筆仔o12530閱讀 482評論 0 1

友情鏈接更多精彩內(nèi)容