asynchronous - Vue/Vuex watcher 动态/异步组件加载
问题描述
我有一个基本组件,其中有一个动态组件,它带有一个基于计算属性显示的 v-for。
到目前为止,我真正尝试过的所有方法都是不正确的方法,就是将加载数据的方法包装在 settimeout 中。这个问题既是一个编码问题,也是一个方法问题。
我的基本组件如下所示:
<template>
<div>
<v-progress-linear
v-model="progressValue"
v-if="loading"
></v-progress-linear>
<component
v-for="table in tables"
:key="table.id"
:is="table.structure"
:table="table"
></component>
</div>
</template>
<script>
import Annual from './DataTables/Annual';
import { mapState, mapGetters } from 'vuex';
export default {
name: "Page",
props: [],
components: {
Annual,
},
data: () => ({
progressValue: 0,
loading: false,
tables: [],
}),
computed: {
...mapGetters({
currentTables: 'getCurrentPageTables',
tableTitles: 'getCurrentPageTableTitles',
}),
...mapState({
pageName: state => state.pageName,
snakeName: state => state.snakeName,
}),
methods: {
updateTables(payload) {
this.loading = true;
payload.forEach(title => {
this.tables.push(this.currentTables.filter(e => title === e.name)[0]);
this.progressValue = this.tables.length / payload.length;
})
},
},
watch: {
snakeName: {
handler() {
this.progressValue = 0;
this.updateTables(this.tableTitles);
this.$nextTick(() => {this.loading = false;})
},
immediate: true,
},
}
}
</script>
Annual.vue 只是一个显示 Vuetify v-data-table 元素的组件,它的结构与此无关紧要。
出于所有意图和目的,我们可以将 currentTables 和 tableTitles 都视为数组,第一个对象的数据填充 Annual.vue 中的 v-data-tables,第二个字符串只是表的名称。
当用户导航到另一个页面时,getter 根据用户导航到的页面返回不同的数据,但有些页面有超过 20 个表,这使得导航到这些页面时页面加载速度很慢。我正在尝试做以下两件事之一: 1. 一次异步加载一个组件,同时仍然使页面功能可供用户浏览。2. 显示一个加载器,在所有内容渲染后消失。我无法弄清楚如何执行后者,因为我无法将此功能放入 mount() 钩子中,因为所有这些都发生在监视的参数更改时(因此每次路由更改时都不会重新安装组件)。
任何有关如何解决此问题的建议将不胜感激。
解决方案
推荐阅读
- r - 为什么我不断收到“参数长度为零”错误?
- python - Python API 和字典
- single-sign-on - AWS Amplify 与托管 Cognito UI 的联合 Okta 身份验证
- java - 在 Android Studio 中离开活动后如何重新建立蓝牙连接?
- .htaccess - 重写 url 的通用规则
- excel - Excel VBA 用于在锁定数据库中的用户选择页面上打开和关闭样式
- html - 浏览器扩展 - 如何阻止自动对焦转到地址栏?
- c - 提高每 x 秒执行一次函数的鲁棒性
- pytorch - `*** RuntimeError: mat1 dim 1 must match mat2 dim 0` 每当我运行模型时(图片)
- php - 不能在 centOS7 中安装 NGINX