Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

196
Vistas
Cómo pasar datos de valor de entrada del componente Vue al elemento raíz

Quiero publicar datos json de Vue a php, pero estoy luchando por encontrar una manera de pasar los datos de valor de entrada del componente Vue al elemento raíz. Cuando llamo al método submitProduct, el mensaje de alerta simplemente me da 'indefinido'. Tuve que eliminar mi código original debido a esa estúpida política de saldo posterior. ¿Qué pasa aquí?

 var productForm = Vue.createApp ({ methods:{ submitProduct: function(){ alert(JSON.stringify(productForm.product)) this.postData(productForm.product) }, postData: function(p){ fetch('mysql_postdata.php', { method: 'POST', mode: "same-origin", credentials: "same-origin", headers: { "Content-Type": "application/json" }, body: JSON.stringify({p:p}) //body: 'd='+d }) } } }) productForm.component('custom-form', { props: ["value"], template: ` <label>SKU<input type="text" :value=this.product.sku></label> <label>Name<input type="text" :value=this.product.name></label> <label>Price<input type="text" :value=this.product.price></label> ` , data: function() { return { product: { sku: 0, name: 'asdf', price: 0 }, options: ['Size', 'Weight', 'Dimensions'], selected: 'Size' } } }) productForm.component('status-bar', { props: ['info'], template: '<p>{{ selected }}</p>' }) const vm = productForm.mount('#product_form')
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

El estado del product pertenece al componente custom-form , por lo que la aplicación raíz no puede acceder al estado.

Si intenta crear un formulario y obtener la entrada del formulario, debe hacer 1 de esto:

  1. Eleve el estado a la raíz y transmita el custom-form y vincule un evento para escuchar los documentos de cambio de estado aquí . (solo haga esto si el componente custom-form no está en el fondo del árbol de componentes)
  2. Usar la tienda de administración de estado como Vuex para compartir el estado dentro de la aplicación (en caso de que el componente secundario esté en el fondo del árbol, debe pasar el estado tantos niveles hacia abajo, usar la administración de la tienda lo resolverá). documentos aquí . Si su aplicación es realmente pequeña, considere la API de proporcionar/inyectar.
  3. Otra opción es usar la API de proporcionar/inyectar (similar al proveedor de contexto en reaccionar).
about 4 years ago · Juan Pablo Isaza Denunciar

0

En primer lugar, después de 3,5 días de luchar para tratar de entender Vue, obtuve un resultado exitoso probado. ¡Quiero agradecerle a usted y a cualquier otra persona que me ayudó a comprender los principios básicos de Vue! :) Por favor vea el enlace de abajo...

https://jsfiddle.net/e2mnh4xa/

PD ¡Y sí! Tienes razón acerca de reorganizar la etiqueta 'formulario personalizado'. :)

código HTML:

 <div id="product_form" v-cloak> <custom-form> </custom-form> </div>

codigo js:

 var productForm = Vue.createApp ({}) productForm.component('custom-form', { props: { modelValue: { type: String, default: '' }, }, components: ['status-bar'], template: ` <button v-on:click="submitProduct">Save</button> <label>SKU<input type="text" v-model="this.product.sku"></label> <label>Name<input type="text" v-model="this.product.name"></label> <label>Price<input type="text" v-model="this.product.price"></label> ` , data: function() { return { product: { sku: 0, name: 'asdf', price: 0, }, options: ['Size', 'Weight', 'Dimensions'], selected: 'Size', outputData: '' } }, computed:{ model:{ get(){ return this.modelValue }, set(v){ this.$emit('update:modelValue',v)} } }, methods:{ submitProduct: function(){ alert (this.showData()); return this.postData(this.product) }, showData: function(){ console.log(this.product.sku) return JSON.stringify(this.product) } } }) const vm = productForm.mount('#product_form')
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda