Tom*_*ley 4 api composition typescript vue.js vuejs3
在 Vue 2 中我确实喜欢这样:
import Component from '@/components/Component.vue';
const VueComponent = {
install(Vue, settings = {}) {
const Constructor = Vue.extend(Component);
const ComponentContainer = new Constructor();
ComponentContainer._props = Object.assign(ComponentContainer._props, settings);
const vm = ComponentContainer.$mount();
document.querySelector('body').appendChild(vm.$el);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以像这样调用任何组件方法:
ComponentContainer.add();
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 Vue 3、TS 和 Composition API 制作我的组件,所以我这样做:
import { App, createApp, Component } from 'vue';
import ComponentName from './components/ComponentName.vue';
const VueComponentName: Component = {
install(Vue: App, settings = {}) {
const ComponentContainer = createApp(ComponentName);
ComponentContainer._component.props = Object.assign(ComponentContainer._component.props, settings);
const wrapper = document.createElement('div');
const vm = ComponentContainer.mount(wrapper);
document.body.appendChild(vm.$el);
},
};
Run Code Online (Sandbox Code Playgroud)
在组件中我创建方法add
:
export default defineComponent({
name: 'ComponentName',
setup(props, {}) {
const add = (status) => {
console.log('test')
};
return { add };
},
});
</script>
Run Code Online (Sandbox Code Playgroud)
现在我想使用插件中的组件方法:
ComponentContainer.add();
Run Code Online (Sandbox Code Playgroud)
但做不到,组件实例没有这个方法......我做错了什么?
注意:我不知道你为什么要做这些事情,对于 vue 组件来说它看起来有点黑暗而且过于复杂!
在 Vue 3 中,setup
方法中声明的所有内容都是组件私有的。如果您希望外部组件/js 代码访问其某些属性,则必须使用defineExpose
可组合项显式声明它。
export default {
setup() {
function add() {...}
defineExpose({ add })
return { add }
}
}
Run Code Online (Sandbox Code Playgroud)
使用 option api 时也存在:expose
归档时间: |
|
查看次数: |
10265 次 |
最近记录: |