[App.Vue]
<ejs-grid :dataSource="data" ref="gridObj" width="600px">
<e-columns>
<e-column
field="OrderID"
headerText="Order ID"
:isPrimaryKey="true"
width="120"
:template="orderIDTemplate"
textAlign="Right"
></e-column>
<e-column
field="OrderDate"
type="date"
width="120"
format="dd/MM/yyyy"
headerText="Start Date"
></e-column>
<e-column field="Status" headerText="Status" width="100"></e-column>
</e-columns>
</ejs-grid>
export default {
data() {
return {
data: gridData,
orderIDTemplate: function() {
return {
template: Vue.component("columntemplate", {
template: ` <div v-if="data.Status === 'allowed'" class="template_checkbox">
<span>{{data.OrderID}}</span>
</div>
<div v-else-if="data.Status === 'excluded'" class="template_checkbox">
<span>{{data.EmployeeID}}</span>
</div>
<div v-else-if="data.Status === 'forbidden'" class="template_checkbox">
<span>{{data.CustomerID}}</span>
</div>`
})
};
}
};
},
methods: {},
provide: {
grid: [Page]
}
}; |
Parent Component:
<template>
<div id="app">
<ejs-grid :dataSource="data" ref="grid" :created="created">
. . .
</ejs-grid>
</div>
</template>
<script>
import Vue from "vue";
import { GridPlugin, Page, Toolbar, Edit } from "@syncfusion/ej2-vue-grids";
import { gridData } from "./data";
import { closest } from "@syncfusion/ej2-base";
import ChildComponent from "./child";
Vue.use(GridPlugin);
Vue.prototype.$eventHub = new Vue();
export default {
components: {
ChildComponent,
},
data() {
return {
shipCountry: "",
data: gridData,
};
},
methods: {
colTemplate: function () {
return { template: ChildComponent };
},
created: function (args) {
// here we are listening the click event
this.$eventHub.$on("communicate", this.getRowDetails);
},
getRowDetails: function (e) {
// based on the click event we are showing the row details here.
let rowObj = this.$refs.grid.ej2Instances.getRowObjectFromUID(
closest(e.target, ".e-row").getAttribute("data-uid")
);
let data = rowObj.data;
alert(JSON.stringify(data));
},
},
provide: {
grid: [Page, Edit, Toolbar],
},
};
</script>
Child Component:
<template>
<button v-on:click="fun($event)">buttton</button>
</template>
<script>
export default {
data() {
return {
name: "ChildComponent",
};
},
methods: {
fun: function (args) {
// here we are emitting the click event
this.$eventHub.$emit("communicate", args);
},
},
};
</script>
|
[App.Vue]
getRowDetails: function (eve) {
let rowObj = this.$refs.grid.ej2Instances.getRowObjectFromUID(
closest(eve.element, ".e-row").getAttribute("data-uid")
);
let data = rowObj.data;
alert(JSON.stringify(data));
},
[Child.Vue]
<template>
<div>
<div id="content" style="margin: 0 auto; width:250px; padding-top: 30px">
<ejs-combobox id="games" v-on:change="fun($event)" :dataSource="sportsData"></ejs-combobox>
</div>
</div>
</template>
<script>
import Vue from "vue";
import { ComboBoxPlugin } from "@syncfusion/ej2-vue-dropdowns";
import { gridData } from "./data";
Vue.use(ComboBoxPlugin);
export default {
data() {
return {
name: "ChildComponent",
sportsData: ["VINET", "TOMSP", "HANAR"]
};
},
methods: {
fun: function(args) {
this.$eventHub.$emit("communicate", args);
}
}
};
</script> |