VueJS动态/异步加载组件

时间:2017-09-26 13:17:52

标签: asynchronous vuejs2 vue-component

Vue版本:2.4.2
webpack的版本:2.6.1

任务是......我有一个组件。它获取全局变量,一个字符串。并且取决于这个变量,它应该动态加载并显示七个非常重的组件之一。在我看来,由于它们的重量而导入它并不是一个好主意。

现在我做了这样的导入:

import comp1 from '@/components/comp1.vue';
import comp2 from '@/components/comp2.vue';

export default {
    components: {comp1, comp2}
...
}

在模板中我们会像<comp1></comp1>一样使用它而这不是我想要的。输出文件非常大,我必须继续前进。

我试过像docs中描述的那样:

export default {
    components: {comp1: () => import('@/components/comp1.vue')}
...
}

A-a-我们有一个错误:

[Vue warn]: Failed to resolve async component: function comp1() {
  return __webpack_require__.e/* import() */(1).then(__webpack_require__.bind(null, 37));
}
Reason: Error: Loading chunk 1 failed.

最初的想法是:

let param = window.GLOBAL_PARAM;
let str = '@/components/comp2.vue';
switch(param) {
    case 1: {
        str = '@/components/comp1.vue';
        break;
    }
    case 2: {
        str = '@/components/comp3.vue';
        break;
    }
    ...
}

export default {
    components: {comp: () => import(str)}
...
}

但我有一个错误:

[Vue warn]: Failed to resolve async component: function comp() {
  return __webpack_require__(50)(componentPath);
}
Reason: Error: Cannot find module '@/components/comp2.vue'.

据我了解,我的webpack存在问题,无法解析“@”符号

所以,问题是:

  1. 如何修复我的组件的异步加载?也许我做了一个 我的代码中的错误?

  2. 如何根据某些条件(组件中的全局变量或参数)以正确的方式组织加载七个组件中的一个。也许有一些webpack偏好和/或一些插件。或者也许我应该通过其他方法来解决这个问题?

0 个答案:

没有答案