Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

276
Views
¿Cómo puedo acceder/mutar las propiedades del componente Vue desde Vanilla JS?

Tengo un proyecto de Vue 2 hecho con Vue CLI, y planeo distribuirlo como una biblioteca, idealmente con las dependencias y la sintaxis de Vue abstraídas por algún tipo de script contenedor. Me gustaría permitir este tipo de interacción:

 // mount the component on a plain JS webpage const myComponent = new MyComponent('#my-component'); // handle events from the component in vanilla JS myComponent.on('load', someHandler); // (A.) call a component method and get a return value const processedData = myComponent.process(123); // (B.) access/mutate reactive component data properties myComponent.setMessage('Hello world!');

Intenté cambiar el "objetivo de compilación" para compilar una biblioteca o un componente web como se menciona en la documentación de Vue . Puedo montar el componente de la biblioteca sin problemas y manejar eventos, pero no menciona cómo podría interactuar con los datos del componente desde fuera de la VM de Vue (consulte los comentarios A y B ).

¿Cómo puedo acceder a los métodos de los componentes de Vue y a las propiedades de los datos desde fuera de la VM de Vue, en Vanilla JS?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Para acceder a las propiedades (y métodos) del componente Vue fuera de la máquina virtual, puede montarlo con una " referencia de plantilla " como esta:

 const vm = new Vue({ components: { MyComponent, }, template: ` <my-component ref="myComponent" /> `, }).$mount('#mount-element");

y luego puedes llamar a sus métodos así:

 vm.$refs.myComponent.someFunction();

Obtendrá los valores devueltos y accederá/mutará las propiedades reactivas dentro de la máquina virtual como se esperaba.

Para usar la sintaxis de clase descrita en la pregunta original, podemos crear una clase simple para envolver el componente vue:

 // import the component built by Vue CLI with the "library" build target // (puts `MyComponent` in the global namespace) import './MyComponent.umd.min.js'; import Vue from 'https://unpkg.com/vue@2/dist/vue.esm.browser.min.js'; export default class { constructor(mountElement) { // mount vue VM with a template ref to access its properties const thisClass = this; this.vm = new Vue({ components: { MyComponent, }, template: ` <my-component ref="myComponent" /> `, }).$mount(mountElement); this.component = this.vm.$refs.myComponent; } // define methods that could call this.component's functions someFunction() { // do stuff return this.component.someFunction() } }

Parece funcionar bastante bien. Una posible mejora sería construir la biblioteca de componentes con una herramienta diferente, ya que Vue CLI v3 (con proyectos Vue v2) no puede generar archivos de módulos ESM, por lo que lo mejor que podemos hacer es un modelo UMD que se define globalmente.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!