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

231
Views
How to pass back an array list back to parent component in ag-grid(Vue)

I am working with AG grid in vue. I have a requirement where, I have two checkboxes rendered using a cellRendererFramework. I am unable to find a way to collect the checkboxes values from row definitions. In ag-grid, I need to select rows based on which rows are checked.

Child component:

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.11/vue.js"></script>
<template>
<input type="checkbox" :id="inputId" :name=name @click ="clickHandler($event)" />
</template>
<script>
  import Vue from 'vue';
  export default Vue.extend({
    name: 'CheckBoxRenderer',

    data: function() {
      return {
        id: '',
        name: '',
        inputId: '',
        rx1List: [],
        rx2List: [],
      };
    },
    beforeMount() {
      this.id = this.params.data.id;
      this.name = 'rx' + this.id;
      this.inputId = this.params.column.colId + '_' + this.id; // if colId(headerName) ="rx1", and id is 2, inputId = rx1_2
    },
    methods: {
      clickHandler(e) {
        //console.log(e.target.checked, this.params.column.colId); //  to get Header name use colId property
        var group = document.querySelectorAll(`input[name="${this.name}"]`);
        // console.log(group.length);

        if (e.target.checked) {
          for (var i = 0; i < group.length; i++) {
            //console.log(group[i].checked);
            group[i].checked = false;
          }

          e.target.checked = true;
          if (this.params.column.colId === 'rx1') {
            this.rx1List.push(this.id);
          }
          console.log(this.rx1List);
        } else {
          e.target.checked = false;
        }

      }
    }
  });
</script>
<style scoped></style>

Parent component ag grid column definition:

 {
                field: "rx1",
                headerName: "Rx1",
                cellRendererFramework: "checkBoxRenderer",
                valueSetter: function (param) {
                    var id = "rx1_" + param.data.id;
                    alert("if check box checked?: ", document.querySelector(id).checked);
                    param.data.rx2 = document.querySelector(id).checked;
                    console.log("Rx2: ", param.data.rx2);
                    return param.data.rx2;
                },
                flex: 1,
                maxWidth: 80,
                cellStyle: { textAlign: "center"},
                
            },
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Define the click handler in the parent component and pass it down to the child as a prop. The child component will only need to call the prop, the parent component will keep track of the checked state(s) and render the grid accordingly. Here's a very simple and contrived example:

Vue.config.productionTip = false;

const Child = {
  name: 'Child',
  props: ['onCheck'],
  methods: {
    handleCheck(e) {
      console.log(`${e.target.checked ? 'Checked' : 'Unchecked'}, let's call our onCheck prop`);
      this.onCheck(e);
    }
  },
  template: `<div><input type="checkbox" id="checkbox1" @change="handleCheck($event)" /></div>`,
}

const Parent = {
  name: 'Parent',
  data() {
    return {
      state: false,
    };
  },
  methods: {
    handleCheck(e) {
      console.log("Got a click event from child!");
      this.state = e.target.checked;
    }
  },
  components: { Child },
  props: [],
  template: '<div><Child :onCheck="handleCheck" /><div>state: {{ state }}</div></div>',
};

const App = new Vue({
  el: '#root',
  components: { Parent },
  template: '<Parent />',
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="root"></div>

A minor aside, you should probably be using @change instead of @click here for checkboxes.

about 4 years ago · Juan Pablo Isaza 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!