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

243
Vistas
Vue no representa el html obtenido

Estoy usando vue en Shopify y estoy trabajando en una página de colección. Cuando hago clic en un filtro, es un href y actualiza la URL y vuelve a cargar la página.

Entonces tengo una grilla de productos

 <div class="grid-wrapper"> <template v-for="(product, index) in collection.products"> <div class="product-item"></div> </template> </div>

Y mi idea era simplemente usar la misma URL con fetch para que la página no se recargara.

hice esto

 fetch('/collections?variant=black') .then(res => res.text()) .then(html => new DOMParser().parseFromText(html, 'text, html')) .then(data => { document.querySelector('.grid-wrapper').innerHTML = data.querySelector('.grid-wrapper').innerHTML })

Esto no funciona porque obtengo la <template v-for…> real como el nuevo innerHTML y vue no se hace cargo. Como puedo resolver esto

En Shopify convertí el objeto así.

 const collection = (() => { const collection = {{ collection | json }} const products = {{ collection.products | json }} collection.products = products return collection })();

Luego, en mi instancia de vue

 new Vue.createApp({ data() { collection: collection } }).mount('#app')
about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Está abordando esto en la forma tradicional de JavaScript de manipular el DOM directamente. En Vue, establecemos el estado que luego puede representar su plantilla.

En cambio:

  1. Cree un atributo de data para almacenar su estado
  2. En methods , escriba una función para obtener sus datos, luego actualice los data los componentes
  3. Llame a su función en los componentes created gancho
  4. En tu template renderiza los resultados
    • No olvides comprobar que está presente primero, con v-if
    • Puede usar v-for para iterar y renderizar listas

Aquí hay una demostración de trabajo


No tengo acceso a su punto final de API, por lo que para fines de demostración, solo estoy usando la API de GitHub para obtener y representar una lista de todos los repositorios en la organización Vue.js.

Esto es lo que parece:

 Vue.config.devtools = false; Vue.config.productionTip = false; new Vue({ el: '#app', name: 'dbzx10299-demo', data() { return { loaded: false, response: null, } }, methods: { fetchData() { const demoEndpoint = 'https://api.github.com/orgs/vuejs/repos'; fetch(demoEndpoint) .then(response => response.json()) .then(data => { this.response = data; this.loaded = true; }) }, }, mounted() { this.fetchData(); }, })
 <script src="https://unpkg.com/vue@2.x/dist/vue.js"></script> <div id="app"> <div class="hello"> <h2>Vue Repo List - Data fetching example</h2> <div v-if="!loaded">Loading...</div> <ul v-else> <li v-for="(repo, index) in response" :key="index"> <a :href="repo.html_url" :title="repo.description" target="_blank"> {{ repo.name }} </a> <i>★ {{ repo.stargazers_count }}</i> </li> </ul> </div> </div>

about 4 years ago · Santiago Gelvez 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