New Router頁面上的元件只有在手動刷新整個頁面後才會加載
P粉986937457
P粉986937457 2024-03-29 12:20:42
0
1
385

我新增了一條新路線,並新增了過渡到新路線的動畫。

我新增了以下程式碼,當我點擊按鈕時,程式碼會推送新路由(/first):

/* From the Template */
<router-view @clickedNext1="onClickTransition" v-slot="{ Component }">
    <transition name="route1" mode="out-in">
      <component :is="Component"></component>
    </transition>
  </router-view>

/* From the Script */
 methods: {
    onClickTransition() {
      this.$router.push("/first");
    },

現在的問題是,當我點擊按鈕並呼叫「onClickTransition」方法時,路由器似乎被推送得很好,但頁面是空的。只有當我透過按 ctrl R 手動刷新頁面時才會呈現元件。

我相信問題可能來自動畫的插入,但如果我手動刷新頁面,動畫效果就很好。所以我不知道問題是什麼。我將非常感謝您的幫助。

這是 app.vue 的其餘程式碼:

<template>
  <router-view @clickedNext1="onClickTransition" v-slot="{ Component }">
    <transition :key="$route.fullPath" name="route1" mode="out-in">
      <component :is="Component" />
    </transition>
  </router-view>
</template>

<script>
export default {
  name: "App",
  components: {},
  data() {
    return {};
  },
  methods: {
    onClickTransition() {
      this.$router.push("/first");
    },
    leave(event) {
      event.preventDefault();
      event.returnValue = "";
    },
  },

  mounted() {
    window.addEventListener("beforeunload", this.leave);
  },

  beforeUnmount() {
    window.removeEventListener("beforeunload", this.leave);
  },
};
</script>
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #fff;
  background-color: #151515;
  position: relative;
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body {
  margin: 0px;
}

/* route transition */
.route1-enter-from {
  opacity: 0;
}
.route1-enter-active {
  transition: all 3s ease-in;
}
.route1-leave-to {
  opacity: 0;
}
.route1-leave-active {
  transition: all 3s ease-in;
}
</style>

index.js 中的程式碼部分:

import { createRouter, createWebHistory } from "vue-router";
import MainPage from "../views/MainPage.vue";
import FirstScene from "../views/FirstScene.vue";

const routes = [
  {
    path: "/",
    name: "main",
    component: MainPage,
  },
  {
    path: "/first",
    name: "first",
    component: FirstScene,
  },
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes,
});

export default router;

「onClickTransition」方法來自「PreStartPage.vue」元件,該元件是主路由「MainPage.vue」的子元件。

一旦在「PreStartPage.vue」中按一下「Next」按鈕,它就會使用this.$emit."MainPage.vue" 向「MainPage.vue」發送事件,然後使用名為「的方法接收該事件” onClickNext1”,它透過另一個this.$emit 向“App.vue”發送信號。這就是App.vue 中顯示的“@clickedNext1”的來源。

以下是「PreStartPage.vue」中的程式碼:

<script>
export default {
  name: "PreStartPage",
  methods: {
    onClickNext() {
      this.$emit("clickedNext");
    },
  },
};
</script>

這是來自「MainPage.vue」的程式碼:

<script>
import PreStartPage from "../components/PreStartPage.vue";
export default {
  name: "MainPage",
  components: { PreStartPage },
  data() {
    return { showMain: true, showPre: false };
  },
  methods: {
    toggleMain() {
      this.showMain = !this.showMain;
      this.showPre = !this.showPre;
    },
    onClickNext1() {
      this.$emit("clickedNext1");
    },
  },
};
</script>

P粉986937457
P粉986937457

全部回覆(1)
P粉469090753

嘗試像這樣修改您的程式碼:

/* From the Template */

 
  
 

設定為 $route.fullPath 的「key」屬性應確保每當路由變更時都能正確完成轉換。

編輯

要解決這個問題,您可以為過​​渡元件添加“:enter-active-class”和“:leave-active-class”屬性,這允許您指定在過渡期間應應用於元素的類別過渡。

在 App.vue 元件中,您可以像這樣更新轉換元件:


  

這將確保在轉換期間將正確的類別應用於元素,並確保元件在動畫開始之前完全呈現。

有關更多信息,我應該您訪問官方維基:https://vuejs.org/guide/built-ins/transition.html#css-based-transitions

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板