es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Accediendo a una lista de casillas de verificación en un componente principal para llevar a cabo acciones en los elementos marcados.

Estoy teniendo problemas con una funcionalidad. Tengo un componente llamado ObjectTable que básicamente estandariza una tabla b-table con datos pasados después de una llamada a una API REST.

En el componente padre:

<objecttable :source="source" :table_data="connectors_data" :display_fields="display_fields"></objecttable>

La tabla agrega un v-slot que crea una casilla de verificación:

<template v-slot:cell(selects)="row">
  <b-form-group>
    <b-form-checkbox id="row.item.id" @change="selectItem($event, row.item.id)"></b-form-checkbox>
  </b-form-group>
</template>

Necesito encontrar una forma de entender qué IDs de fila están marcados en el componente padre. Dado que es una lista de elementos, ¿cómo puedo emitir un evento cuando se marca cada uno para almacenarlo en el componente padre? ¿O puedo llamar específicamente algo en el componente hijo desde un método del componente padre (el método se llama cuando se presiona un botón en el padre)?

Gracias por tu ayuda.

BCBB

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para emitir un evento cuando se marca una casilla de verificación en el componente ObjectTable, puedes agregar una propiedad al componente ObjectTable que contendrá los IDs seleccionados.

    En el componente principal, crea un array en los datos para almacenar los IDs de las casillas de verificación seleccionadas.

    Luego, agrega un método en el componente principal que manejará el evento cuando se marque una casilla de verificación. Este método deberá actualizar el array de IDs seleccionados.

    Finalmente, emite un evento desde el componente ObjectTable cada vez que se marque una casilla de verificación pasando el array de IDs seleccionados como argumento.

    Aquí tienes un ejemplo de cómo puedes implementar esto:

    Componente ObjectTable (agrega una nueva propiedad y emite un evento cuando se marca una casilla de verificación):

    <template>
      <b-table :fields="display_fields" :items="table_data">
        <template v-slot:cell(selects)="row">
          <b-form-group>
            <b-form-checkbox id="row.item.id" @change="selectItem(row.item.id)"></b-form-checkbox>
          </b-form-group>
        </template>
      </b-table>
    </template>
    
    <script>
    export default {
      props: {
        source: String,
        table_data: Array,
        display_fields: Array,
        selected_ids: Array // nueva propiedad para almacenar los IDs seleccionados
      },
      methods: {
        selectItem(id) {
          // emite un evento pasando el array de IDs seleccionados
          this.$emit('checkbox-selected', this.selected_ids)
        }
      }
    }
    </script>
    

    Componente principal (define una nueva propiedad de datos para almacenar los IDs seleccionados, agrega un método para actualizar los IDs seleccionados y escucha el evento “checkbox-selected” de ObjectTable, que actualiza el array selected_ids):

    <template>
      <div>
        <objecttable :source="source" :table_data="connectors_data" :display_fields="display_fields" :selected_ids="selected_ids" @checkbox-selected="updateSelectedIds"></objecttable>
        <button @click="saveSelections">Guardar Selecciones</button>
      </div>
    </template>
    
    <script>
    import ObjectTable from 'ruta/al/ObjectTable.vue'
    
    export default {
      components: {
        ObjectTable
      },
      data() {
        return {
          source: '...',
          connectors_data: [...],
          display_fields: [...],
          selected_ids: [] // nueva propiedad de datos para almacenar los IDs seleccionados
        }
      },
      methods: {
        updateSelectedIds(selected_ids) {
          this.selected_ids = selected_ids // actualiza el array de IDs seleccionados
        },
        saveSelections() {
          console.log(this.selected_ids) // haz algo con el array de IDs seleccionados
        }
      }
    }
    </script>
    

Comments are closed.