【问题标题】:Check if dynamic component exists检查动态组件是否存在
【发布时间】:2021-12-22 02:27:31
【问题描述】:

在 Nuxt 中动态显示组件之前,我需要检查它是否存在。组件名称是基于路由 slug,因此我无法提前知道组件名称是否有效。

如果 slug 没有组件,我想使用 v-else 显示文本。 (见标记)

但是,我无法推断组件是否可用,因为返回值始终是一个函数。

<component :is="componentDynamic" v-if="componentDynamic" />
<h1 v-else>Component Not available</h1>
import Vue from 'vue'
export default Vue.extend({
  computed: {
    componentDynamic() {
      const componentName = this.$route.params.slug,
      const result = async () => await import(`@/components/${componentName}`)
      console.log(result)
      return result
    },
  },
})

【问题讨论】:

标签: javascript nuxt.js


【解决方案1】:

通过尝试通过import 导入组件来确定组件是否存在。 如果导入出错,则该组件不可用并显示替代消息。

<template>
  <div>
    <component
      :is="componentName"
      v-if="componentIsAvailable"
    />
    <!-- Show if component doesn't exist -->
    <div v-else>
      <h1 class="text-5xl my-20">Component Not available</h1>
    </div>
  </div>
</template>
    data() {
      return {
        componentIsAvailable: false,
        componentName:  this.$route.params.componentName // nuxt components are in PascalCase, so your parameter / slug should be as well
      }
    },
    async fetch() {
      const name = this.componentName

      this.componentIsAvailable = await import(`@/components/${name}`)
        .then((_res) => {
          // console.log('result', _res)
          return true
        })
        .catch((_error) => {
          // console.log('error', _error)
          return false
        })

    },

【讨论】:

    猜你喜欢
    • 2016-10-31
    • 2018-06-06
    • 2011-10-23
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2014-08-11
    相关资源
    最近更新 更多