recherche

Maison  >  Questions et réponses  >  le corps du texte

Vue 3 : API de composition, comment appeler une méthode depuis une instance de composant ?

Dans Vue 2, j'aime ça :

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);
       }
    }

Ensuite, je peux appeler n'importe quelle méthode de composant comme ceci :

ComponentContainer.add();

J'essaie de créer mon composant en utilisant Vue 3, TS et Composition API, donc je fais ceci :

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);
  },
};

Dans le composant je crée la méthode add:

export default defineComponent({
  name: 'ComponentName',
  setup(props, {}) {
    const add = (status) => {
      console.log('test')
    };

    return { add };
  },
});
</script>

Maintenant, je souhaite utiliser la méthode des composants du plugin :

ComponentContainer.add();

Mais cela n'est pas possible, l'instance du composant n'a pas cette méthode... Qu'ai-je fait de mal ?

P粉464208937P粉464208937293 Il y a quelques jours499

répondre à tous(1)je répondrai

  • P粉613735289

    P粉6137352892024-03-26 15:31:35

    Dans Vue 3, setup 方法中声明的所有内容都是组件私有的。如果您希望外部组件/js 代码访问其某些属性,则必须使用 defineExpose est composable.

    export default {
      setup() {
        function add() {...}
    
        defineExpose({ add })
    
        return { add }
      }
    }
    

    Également présent lors de l'utilisation de l'API d'options : expose

    répondre
    0
  • Annulerrépondre