• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

124
Vistas
Tratando de obtener una tabla b para manejar una matriz de matrices

Aquí está la tabla b, mostrará una columna de alimentos

 <b-table :fields="Fields" :items="ITEMS"> <template #cell(food)="data"> {{data.item.food}} </template> </b-table> //The column Fields() { return [{key: 'food', label: 'food'}]; }

Actualmente los datos se ven así:

 [ { "food": "taco" }, { "food": "burrito" } ]

Escribe todos los valores en una sola columna en la tabla.

Lo que necesito

Necesito la tabla para poder manejar datos que se vean así

 [ { "foods": [ { "food": "taco" }, { "food": "burrito" } ] }, { "foods": [ { "food": "soup" }, { "food": "rice" } ] } ] //The column, probably not correct but I'm trying to get it to read every "food" under all "foods" Fields(){ return [{key: 'foods.food', label: 'food'}]; },

Esto escribiría los datos en la tabla igual que antes, en una columna.

¡Esto casi funciona!

 <!-- Everytime a "foods" array is found, loop through all the food items that it holds --> <b-table :fields="Fields" :items="ITEMS"> <template #cell(foods)="data"> <div v-for="entry in data.item.foods" :key="entry.food"> <!-- **THIS TEMPLATE DOES NOT WORK, but if it did then it would count as a solution!** --> <template #cell(food)="data"> {{food}} </template> </div> </template> </b-table>
almost 3 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Para obtener una tabla de una sola columna con una lista de nombres de alimentos, la tabla bootstrap-vue quiere que los datos se vean así...

 fields: ['food'], items: [ { food: "taco" }, { food: "soup" }, // ... ]

Creo que entiendo del OP (gracias por las ediciones) que los datos de origen se ven diferentes. El trabajo, entonces, es transformar los datos de origen en lo que necesita la tabla. Esto se puede hacer mejor con un apoyo calculado. El beneficio es que la transformación se almacenará en caché y permanecerá reactiva a los cambios en los datos de origen.

Esto es todo lo que necesita para convertir los datos descritos en el OP en los datos que necesita la tabla:

 computed: { items() { // presuming source data is available and in the OP format return this.sourceData.map(d => d.foods).flat() }, }

Aquí hay una demostración de ese cálculo funcionando:

 window.onload = () => { new Vue({ el: '#app', data: function() { return { sourceData: [], fields: [{ key:'food', label:'The Foods' } ] } }, mounted() { this.sourceData = [ { foods: [ { food: "taco"}, { food: "burrito"} ] }, { foods: [ { food: "soup"}, { food: "rice"} ] }, ]; }, computed: { items() { return this.sourceData.flatMap(d => d.foods); } }, }) }
 <script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js"></script> <script src="https://unpkg.com/bootstrap-vue@2.0.0-rc.27/dist/bootstrap-vue.js"></script> <link rel="stylesheet" href="https://unpkg.com/bootstrap-vue@2.0.0-rc.27/dist/bootstrap-vue.css"/> <link rel="stylesheet" href="https://unpkg.com/bootstrap@4.3.1/dist/css/bootstrap.min.css"/> <div id="app"> <b-table :items="items" :fields="fields"/> </div>

almost 3 years ago · Juan Pablo Isaza Denunciar

0

Esto escribiría los datos en la tabla igual que antes, en una columna.

Para lograr esto, su matriz de items debe ser una matriz plana. Por lo tanto, puede convertir la matriz de entrada en una matriz plana primero en el gancho del ciclo de vida de mounted() y luego enlazar en la <v-table> .

demostración :

 window.onload = () => { new Vue({ el: '#app', data() { return { fields: [{key: 'food', label: 'food'}], items: [ { "foods": [ { "food": "taco" }, { "food": "burrito" } ] }, { "foods": [ { "food": "soup" }, { "food": "rice" } ] } ] } }, mounted() { this.items = this.items.map(d => d.foods).flat(); } }) }
 <script src="https://unpkg.com/vue@2.6.10/dist/vue.min.js"></script> <script src="https://unpkg.com/bootstrap-vue@2.0.0-rc.27/dist/bootstrap-vue.js"></script> <link rel="stylesheet" href="https://unpkg.com/bootstrap-vue@2.0.0-rc.27/dist/bootstrap-vue.css"/> <link rel="stylesheet" href="https://unpkg.com/bootstrap@4.3.1/dist/css/bootstrap.min.css"/> <div id="app"> <b-table :items="items" :fields="fields"> </b-table> </div>

almost 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda