Vue.js 2:如何从.vue文件初始化(构造)Vue组件?

Alf*_*ang 4 mvvm ecmascript-6 vue.js vue-component vuejs2

我正在尝试创建一个Component实例:

App.vue

import MyComponent from './components/MyCompnent.vue';
export default {
    mounted() {
        // The following line fails.
        const vm = new MyComponent();
        vm.$mount('#some-place');
    }
}
Run Code Online (Sandbox Code Playgroud)

并且该new行报告错误:

未捕获的TypeError:MyComponent.default不是构造函数

那么如果我想创建组件呢?

Alf*_*ang 10

最后,我自己找到了解决方案,非常简单:

Component进口本身是不是一个构造函数,但我们可以很容易地使一个构造函数:

import MyComponent from './components/MyCompnent.vue';
const MyComponentConstructor = Vue.extend(MyComponent);
Run Code Online (Sandbox Code Playgroud)

所以最终的解决方案是:

import MyComponent from './components/MyCompnent.vue';
export default {
    mounted() {
        const MyComponentConstructor = Vue.extend(MyComponent);
        const vm = new MyComponentConstructor();
        vm.$mount('#some-place');
    }
}
Run Code Online (Sandbox Code Playgroud)


Sau*_*abh 5

以下是在其他组件中注册组件的方法:

export default {
  el: '#some-place'
  components: {
      'my-component'
  }
}
Run Code Online (Sandbox Code Playgroud)

文档:链接

编辑:如何创建虚拟机实例

如果你想初始化 vm 实例,你可以使用Vue.extend完成。它的作用是:

创建基础 Vue 构造函数的“子类”。参数应该是一个包含组件选项的对象。

这里需要注意的一点是:

这里要注意的特殊情况是 data 选项 - 当与 Vue.extend() 一起使用时,它必须是一个函数。

您需要在代码中进行类似于以下的更改:

import MyComponent from './components/MyCompnent.vue';
const vmClass = Vue.extend(MyComponent)
const vm = new MyComponent();
vm.$mount('#some-place');
Run Code Online (Sandbox Code Playgroud)