vue.js - nuxt中根据url参数动态加载组件

标签 vue.js vue-component nuxt.js

我在 nuxt 中有一个页面分为两部分。第一部分是一个普通的模板结构,其中填充了基于 url 参数的动态内容。第二部分是应该基于此数据加载的组件。我正在尝试像这样完成它:

<template>
  <div>
    <h1>{{myData.header}}</h1>
    <p>{{myData.text}}</p>
    <my-component></my-component>
  </div>
</template>

<script>
export default {
  components: {
    'my-component': () => import('@/components' + this.myData.component)
  },
  async asyncData(context) {
    return {
      myData: context.params.myData
    }
  }
}
</script>

但这行不通。有没有办法做到这一点?

我熟悉使用 <my-component :is="myData.component"></my-component> 的可能性.但是,这需要我显式导入每个组件,我想避免这种情况。

最佳答案

我昨天找到了解决办法。它需要这样做。

<template>
<div>
    <h1>{{myData.header}}</h1>
    <p>{{myData.text}}</p>
    <component :is="componentInstance"></component>
</div>
</template>

<script>
export default {
    computed: {
        componentInstance () {
        const name = this.myData.component
        return () => import(`./components/${name}`)
        }
    },
    async asyncData(context) {
        return {
        myData: context.params.myData
        }
    }
}
</script>

本文中的更多信息:https://itnext.io/vue-a-pattern-for-idiomatic-performant-component-registration-you-might-not-know-about-9f3c091846f5 .

关于vue.js - nuxt中根据url参数动态加载组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51358922/

相关文章:

javascript - 如何在 Vue 3 中访问 $children 以创建 Tabs 组件?

javascript - 有没有办法在 main.js 中访问 vue js Vue Session

vue.js - 使用 NuxtLayout 发出事件。 Vue3 Nuxt3

javascript - Vue JS 通过用户输入更新计算属性

javascript - 使用 Vue.JS v-bind :class with conditional statement of dynamically created array

javascript - 从观察者回调调用时的 Vue 组件 Prop `undefined`

vue.js - 使用 ChartJS 通过 Vue 获得 "Maximum call stack size exceeded"

javascript - Action 函数无法识别vuex数据

docker - 我在为我的 nuxtjs 应用程序构建 docker 时遇到问题,热重载不起作用

javascript - vue + nuxt.js - 如何根据域具有不同的样式?