畫面會殘留上一頁的內容

【Vue3】【問題】跳轉頁面後,畫面會殘留上一頁的內容(已解決)

最後更新日期:2024年08月24日

使用技術

Vue: 3.4.21
Vue router: 4.3.0
Vite: 5.2.8

問題說明

當從首頁點擊連結,進入下一頁時,畫面會殘留上一頁的內容

首頁
下一頁殘留上一頁內容

程式碼

<script setup lang="ts">
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
import HelloButton from './components/HelloButton.vue';
</script>

<template>
  <header>
    <div>
    <img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />
    <div class="wrapper">
      <HelloWorld msg="這是一個 Vue 專案!" />
      <HelloButton />
      <nav>
        <RouterLink to="/login">Login</RouterLink>
        <RouterLink to="/">Home</RouterLink>
        <RouterLink to="/about">About</RouterLink>
      </nav>
    </div>
    <RouterView />
  </div>
  </header>
</template>

解決方法

<header> 標籤增加 v-if="$route.path === '/' 判斷,
代表 <header> 標籤的內容只在 url 為 ‘/’ 的時候才顯示。

程式碼

import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
import HelloButton from './components/HelloButton.vue';
</script>

<template>
  <header v-if="$route.path === '/'">
    <div>
      <img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />
      <div class="wrapper">
        <HelloWorld msg="這是一個 Vue 專案!" />
        <HelloButton />
        <nav>
          <RouterLink to="/login">Login</RouterLink>
          <RouterLink to="/">Home</RouterLink>
          <RouterLink to="/about">About</RouterLink>
        </nav>
      </div>
    </div>
  </header>
  <RouterView />
</template>

其實這樣的方法有點治標不治本,
目前在想應該是 <RouterView> 標籤或router 設定的問題,
有空再了解後,大概才能知道殘留的真正原因。

參考資料

  1. ChatGPT
  2. vue中使用beforeRouteLeave解决页面残留问题
  3. vue跳转页面后出现上一个页面的内容