vue子頁面控制父頁面刷新問題
vue子頁面控制父頁面刷新
父頁面
?//父組件調(diào)用子組件
<el-dialog :visible.sync="showDialog" width="65%">
? ? ? <version
? ? ? ? v-if="showDialog"
? ? ? ? :versionId="versionId"
? ? ? ? :currentVersion="currentVersion"
? ? ? ? :batchNo="batchNo"
? ? ? ? :showDialog="showDialog"
? ? ? ? :subjectList="subject"
? ? ? ? @on-load = "onLoad"
? ? ? ? @refresh-change="handleRefreshChange"http://調(diào)用方法
? ? ? ></version>
? ? </el-dialog>
methods:{
handleRefreshChange() {
? ? ? this.onLoad(this.page);//調(diào)用父組件的刷新方法
? ? },
}子頁面
//在需要點(diǎn)擊后刷新的位置添加上
this.$emit('refresh-change',true);vue刷新頁面的三種方式,并處理死循環(huán)
vue頁面刷新的辦法和處理頁面重復(fù)循環(huán)。先寫一下刷新頁面的方法,解決循環(huán)放在下邊。
1.直接使用刷新當(dāng)前頁面
會(huì)有短暫白屏,體驗(yàn)效果不好
location.reload();
2.通過路由傳入0,刷新當(dāng)前頁面
忽悠短暫白屏,體驗(yàn)效果不好
this.$router.go(0);
3.通過provide / inject組合
這個(gè)體驗(yàn)感是最好的!
第一步:先在App.vue里 給 <router-view> 加一個(gè) if 判斷,通過 $nextTick()實(shí)現(xiàn)先移除再添加達(dá)到刷新的功能。
<template>
? <div id="app">
? ? <router-view v-if="isRouterAlive"> </router-view>
? </div>
</template>
<script>
export default {
? name: "App",
? data() {
? ? return {
? ? ? isRouterAlive: true,
? ? };
? },
? provide() {
? ? return {
? ? ? reload: this.reload,
? ? };
? },
? methods: {
? ? reload() {
? ? ? this.isRouterAlive = false; //先關(guān)閉,
? ? ? this.$nextTick(function () {
? ? ? ? this.isRouterAlive = true; //再打開
? ? ? });
? ? },
? },
};
</script>第二步:在需要用到刷新的頁面接收 inject:['reload']
export default {
? ? inject:['reload'],?
? ? data () {
? ? ? ? return {}
? ? },第三步:在需要使用到刷新的地方直接調(diào)用
this.reload();
接下來,說下死循環(huán),這個(gè)是因?yàn)樗⑿马撁婧?,這段代碼又重新執(zhí)行。
想要解決有兩種方法
1.在想要刷新的地方使用點(diǎn)擊事件,這樣只有在點(diǎn)擊的時(shí)候會(huì)觸發(fā)這個(gè)刷新事件
<template>
? <div>
? ? <button @click="cli"></button>
? </div>
</template>
<script>
export default {
? name: "1",
? methods: {
? ? cli() {
? ? ? this.$router.go(0); //我這里隨便用一種刷新的方法
? ? },
? },
};
</script>
<style scoped>
</style>2.這種方法,使用定時(shí)器的辦法,不通過手動(dòng)點(diǎn)擊,自動(dòng)觸發(fā)
<template>
? <div></div>
</template>
<script>
export default {
? name: "1",
? mounted() {
? ? setInterval(() => {
? ? ? this.$router.go(0); //我這里隨便用一種刷新的方法
? ? }, 300000); //每5分鐘自動(dòng)調(diào)用一次
? },
};
</script>
<style scoped>
</style>總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用vuetify實(shí)現(xiàn)全局v-alert消息通知的方法
使用強(qiáng)大的Vuetify開發(fā)前端頁面,結(jié)果發(fā)現(xiàn)官方?jīng)]有提供簡便的全局消息通知組件,所以自己動(dòng)手寫了一個(gè)簡單的組件,接下來通過本文給大家介紹使用vuetify實(shí)現(xiàn)全局v-alert消息通知的詳細(xì)代碼,感興趣的朋友跟隨小編一起看看吧2024-02-02
基于vue實(shí)現(xiàn)swipe輪播組件實(shí)例代碼
本篇文章主要介紹了基于vue實(shí)現(xiàn)swipe輪播組件實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
基于Vue2實(shí)現(xiàn)簡易的省市區(qū)縣三級(jí)聯(lián)動(dòng)組件效果
這是一個(gè)基于Vue2的簡易省市區(qū)縣三級(jí)聯(lián)動(dòng)組件,可以控制只顯示省級(jí)或只顯示省市兩級(jí),可設(shè)置默認(rèn)值等。提供原始省市縣代碼和名稱數(shù)據(jù),適用于各種有關(guān)城市區(qū)縣的應(yīng)用。需要的朋友可以參考下2018-11-11
Vue3格式化Volar報(bào)錯(cuò)的原因分析與解決
Volar 與vetur相同,volar是一個(gè)針對(duì)vue的vscode插件,下面這篇文章主要給大家介紹了關(guān)于Vue3格式化Volar報(bào)錯(cuò)的原因分析與解決方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
淺談Vue使用Cascader級(jí)聯(lián)選擇器數(shù)據(jù)回顯中的坑
這篇文章主要介紹了淺談Vue使用Cascader級(jí)聯(lián)選擇器數(shù)據(jù)回顯中的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10

