Dalam Vue 2 saya melakukan seperti ini:
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); } }
Kemudian saya boleh memanggil mana-mana kaedah komponen seperti ini:
ComponentContainer.add();
Saya cuba membuat komponen saya menggunakan Vue 3, TS dan API Komposisi, jadi saya melakukan ini:
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); }, };
Dalam komponen saya mencipta kaedah add
:
export default defineComponent({ name: 'ComponentName', setup(props, {}) { const add = (status) => { console.log('test') }; return { add }; }, }); </script>
Sekarang saya mahu menggunakan kaedah komponen dari pemalam:
ComponentContainer.add();
Tetapi ia tidak boleh dilakukan, contoh komponen tidak mempunyai kaedah ini... Apakah salah saya?
Dalam Vue 3,
setup
方法中声明的所有内容都是组件私有的。如果您希望外部组件/js 代码访问其某些属性,则必须使用defineExpose
boleh digubah.Juga hadir apabila menggunakan pilihan api:
expose