如何在Vue3和Vite中正确设置加载屏幕?

问题描述 投票:0回答:1

我想在应用程序加载时设置加载屏幕。我目前正在使用 Loading 组件并将其时间间隔设置为 2 秒。然而,这不是设置加载屏幕的正确方法。处理整个应用程序加载状态的最佳方法是什么?

我直接在

App.vue
的router-view中使用了Loading组件,所以我不必在App的每个组件中都使用Loading组件。

以下是我的

App.vue



<template>
  <v-app class="container">
    <v-app-bar color="green" class="app-bar">
      <v-toolbar-title class="ml-0 pl-4">
        <span class="hidden-sm-and-down">{{ appName }}</span>
      </v-toolbar-title>
      <v-btn rounded depressed dark large @click="gotoHome()">
        <h3>Dashboard</h3>
        <v-icon class="px-2">mdi-ballot</v-icon>
      </v-btn>
      <v-btn rounded depressed dark large @click="dialog = !dialog">
        <h3>Markets</h3>
        <v-icon class="px-2">mdi-apps</v-icon>
      </v-btn>
      <v-btn rounded depressed dark large @click="gotoSettings()">
        <h3>Settings</h3>
        <v-icon class="px-2">settings</v-icon>
      </v-btn>
      <v-btn rounded depressed dark large @click="gotoVerus()">
        <h3>Verus</h3>
        <v-icon class="px-2">mdi-apps</v-icon>
      </v-btn>
    </v-app-bar>
    <v-dialog v-model="dialog" fullscreen hide-overlay transition="dialog-bottom-transition">
      <v-card>
        <v-toolbar>
          <v-btn dark @click="dialog = false">
            <v-icon>mdi-close</v-icon>
          </v-btn>
          <v-toolbar-title>Markets</v-toolbar-title>
          <div class="flex-grow-1"></div>
          <v-toolbar-items>
            <v-btn dark text @click="dialog = false">back</v-btn>
          </v-toolbar-items>
        </v-toolbar>
        <v-list three-line subheader>
          <v-subheader>Go to markets</v-subheader>
          <v-list-item>
            <v-list-item-content>
              <v-list-item-title>Informational Section</v-list-item-title>
              <v-list-item-subtitle>Please wait for the available market links to load</v-list-item-subtitle>
              <AppMarkets v-on:gotoMarket="gotoMarket" :key="componentKey" />
            </v-list-item-content>
          </v-list-item>
        </v-list>
      </v-card>
    </v-dialog>
    <v-navigation-drawer
        v-model="drawer"
        location="left"
        temporary
      >
        <v-list
          :items="items"
        ></v-list>
      </v-navigation-drawer>
      <Loading v-if="loading"></Loading>
      <router-view v-else>
      </router-view>
  </v-app>
</template>


<script>
import AppMarkets from './views/AppMarkets.vue'
import {ref, onMounted} from 'vue'
import Loading from './Loading.vue'


export default {
  name: 'App',
  components: {
    AppMarkets,
    Loading
},
  props: {
    source: String
  },
  setup() {
    const loading = ref(true);
    onMounted(() => {
      // For demonstration purposes, setting loading to true for 2 seconds.
      setTimeout(() => {
        loading.value = false;
      }, 2000);
  });
    return {
      loading,
    };
  },

  methods: {
    gotoHome() {
      this.$router.push('/')
    },
    gotoSettings() {
      this.$router.push('/settings')
    },
    gotoVerus() {
      this.$router.push('/verus')
    },
    gotoMarket: function(base, rel) {
      console.log("Going to new market..." + base + "/")// + rel)
      console.log(this.componentKey)
      this.componentKey += 1
      this.dialog = !this.dialog
      window.location.href='/traderview/'+base+'/'+rel;
    },
    doAction: function(command) {
      window.location.href = "/" + command.toLowerCase().replace(/ /g, "");
    }
  },
  data: () => ({
    appName: 'OrderBook Live',
    base: '',  
    componentKey: ref(0),
    dialog: ref(false),
    drawer: ref(false),
  }),
  
  
}
</script>
vue.js vuejs3 vuetify.js vuex vite
1个回答
0
投票

在Vue 3中,组件的生命周期会经历从创建到销毁的几个阶段。关键的生命周期挂钩是:

在您的情况下,您可以将加载设置为 true beforemount 并在组件完全加载到 mounted 时设置为 false 或者如果有任何数据请求,您也可以在该请求中使用它

BeforeCreate:在创建实例之前触发。至此,数据观察、事件、观察者都设置好了,但是模板编译还没有发生。

Created:创建实例后调用created钩子。此时实例已初始化,您可以访问数据、方法和事件。

BeforeMount:在安装开始之前调用。虚拟 DOM 已创建,组件即将渲染。

Mounted:在组件安装到 DOM 后调用此钩子,这意味着它已完全加载并可见。它通常用于在组件渲染后进行 API 调用或操作 DOM。

BeforeUpdate:当数据发生变化且组件即将重新渲染时,会调用此钩子。您可以在更新之前执行操作。

Updated:在数据更改导致组件重新渲染后调用。此时,DOM 已更新以反映最新的更改。

BeforeUnmount:在卸载组件之前调用。您可以在这里执行清理操作。

Unmounted:组件被卸载并销毁后调用。它用于清理和释放资源。

© www.soinside.com 2019 - 2024. All rights reserved.