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

183
Views
¿Qué enfoque de compartir plantilla y lógica se prefiere en VUE?

Tengo dos componentes de contexto no relacionados que comparten lógica y plantilla de una manera que parece que uno está extendiendo al otro.

Imagine componentes Drop and Pick como este:

 // pick.js import Vue from 'vue' import Component from 'vue-class-component' @Component export default class Pick extends Vue { template: '<p>{{name}}</p>', created() { console.log('Hello Pick'); } data: { name: 'pick', count: 0 }, methods: { add: function () { this.count++; } } } // drop.js import Vue from 'vue' import Component from 'vue-class-component' @Component export default class Drop extends Vue { template: '<p>{{name}}</p> <span v-if="isUserFriendly">Greetings!!!</span>', created() { console.log('Hello Drop'); } data: { name: 'drop', isUserFriendly: false, count: 0, drops: 0 }, methods: { add: function () { this.count++; this.drops++; }, remove: function () { this.count--; }, } }

Intuitivamente, uno puede decir que Drop está extendiendo Pick mientras agrega alguna funcionalidad y modifica la plantilla. Esta parece ser una buena solución, pero luego pensé que para lograr esa plantilla de selección debería verse así:

 <p>{{name}}</p> <span v-if="isUserFriendly">Greetings!!!</span>

¿Recuerdas que dije componentes de contexto no relacionados ? Ahora Pick necesita saber acerca de isUserFriendly, lo cual es inaceptable y no creo que sea la solución correcta. Además, generará una sobrecarga en el futuro, ya que la herencia puede ser difícil de mantener (imagine más componentes para extender y lógica para compartir).

¿Cuál crees que será el mejor enfoque aquí? ¿Tal vez hay otra forma con la que no estoy familiarizado?

¡Gracias por la ayuda!

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

La composición de componentes es una forma común de hacer esto. El componente de eliminación contiene un superconjunto de funciones, es decir, el componente de selección debe permitir que se ajuste de una manera que permita la salida y el comportamiento deseados.

Para la relación padre-hijo, las piezas de datos se pasan como accesorios y eventos, y las piezas de vista se pasan como ranuras.

La lógica adicional permanece en el componente principal.

En el componente hijo ( Pick ):

 <div> <p>{{name}}</p> <slot name="extraText"/> </div>

y

 add: function () { this.count++; this.$emit('add'); }

En el componente padre ( Drop ):

 <Pick @add="drops++"> <template v-slot:extraText> <span>Greetings!!!</span> </template> </Pick>
over 4 years ago · Santiago Trujillo 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!