【问题标题】:how to know when dynamic component has fully loaded如何知道动态组件何时已完全加载
【发布时间】:2019-10-28 17:21:47
【问题描述】:

所以我像这样动态加载一些组件:

const Page0 = () => import("@/components/pages/tutorial/Pages/Page0")
const Page1 = () => import("@/components/pages/tutorial/Pages/Page1")

还有10个这样的页面,将根据路由参数调用。

我想知道,为了创建加载屏幕,我如何知道某个页面是否已加载,以及我如何知道它何时被切换。

这就是我完全使用它的方式。

<template>
    <div>
        <component :is="current_page"></component>
    </div>
</template>

<script>
    const Page0 = () => import("@/components/pages/tutorial/Pages/Page0/index.vue")
    const Page1 = () => import("@/components/pages/tutorial/Pages/Page1/index.vue")

    export default {
        scrollToTop:
            true,
        components:
            {
                Page0,
                Page1,
            },
        computed:
            {
                current_page ()
                {
                    return "Page" + this.page
                }
            },
        asyncData ({
            route, store, env, params, query, req, res, redirect, error
        })
        {
            return {
                page:
                    params.page
            }
        }
    }
</script>

【问题讨论】:

  • 你在用vue-router吗?
  • @Phil 是的,但我正在通过参数字段更改页面,所以类似于/tutorial/page/1/tutorial/page/2,格式为/tutorial/page/:id
  • 我认为import() 会返回一个承诺,如果平常.then() 可能会起作用。
  • @RichardMatsen 我将它与computedcomponents 结合使用。我已经更新以显示我在做什么,所以我不确定如何将 .thenawait 放入其中

标签: javascript vue.js vuejs2 nuxt.js


【解决方案1】:

如何知道动态组件何时加载完毕?

您可以使用@hook:mounted 表示每个组件是否动态,以表明该组件已加载。

例如

<component :is="current_page" @hook:mounted="doSomething"></component>

查看codesandbox example

【讨论】:

  • Kewl。我不知道生命周期挂钩会发出这样的自定义事件。这在某处有正式记录吗?
  • 不幸的是,据我所知,它没有记录在某处。
  • @RichardMatsen 我们在这里讨论官方文档。不过感谢您的链接。
  • 我注意到您的导入不是动态的(在代码和框中),将它们切换了,但到目前为止效果不佳。
猜你喜欢
  • 2012-04-13
  • 2023-01-05
  • 2013-09-27
  • 2010-11-18
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多