Alf*_*ang 4 mvvm ecmascript-6 vue.js vue-component vuejs2
我正在尝试创建一个Component实例:
App.vueimport 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)
以下是在其他组件中注册组件的方法:
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)