Hi Sowmiya.P,
Thanks for the reply, Event Bus works for me for notifying the event.
But, When I modify/delete an element or add a new element in the datasource from the default component, it's not getting reflected in the already plotted data, how can i achieve the reactivity ?
Here is the sample code for my requirement.
<template>
<div id="app">
<div class="control_wrapper">
<ejs-treeview id='treeview' :fields="fields" cssClass='custom' :nodeTemplate='Template'></ejs-treeview>
</div>
</div>
</template>
<script>
import Vue from 'vue';
import { TreeViewPlugin } from "@syncfusion/ej2-vue-navigations";
import { ButtonPlugin } from "@syncfusion/ej2-vue-buttons";
import Vue from 'vue';
const EventBus = new Vue();
Vue.use(TreeViewPlugin);
Vue.use(ButtonPlugin);
export default {
name: 'app',
data () {
var demoVue = Vue.component("demo", {
template: `<div> <span class="text" >{{ data.name }}</span>
<span class="modify-items" style="position:absolute;right:15px;font-size:18px">
<ejs-button id="add" class="e-btn e-info" v-on:click.native="editTask">editTask </ejs-button>
<ejs-button id="add" class="e-btn e-info" v-on:click.native="addTask">Add Task </ejs-button>
</span>
</div>`,
data() {
return {
data: {}
};
},
methods: {
editTask:function() {
// Edit task
EventBus.$emit('editTaskHavingId', { Id: 1 });
//console.log('task edited');
},
destroyTask(taskId) {
EventBus.$emit('destroy-task', taskId);
},
addTask(obj) {
EventBus.$emit('add-task', taskId);
}
}
});
var dataSource = [
{ id: 1, name: 'Steven Buchanan', eimg: 'https://ej2.syncfusion.com/demos/src/treeview/images/employees/10.png', job: 'CEO', hasChild: true, expanded: true },
{ id: 2, pid: 1, name: 'Laura Callahan', eimg: 'https://ej2.syncfusion.com/demos/src/treeview/images/employees/2.png', job: 'Product Manager', hasChild: true },
{ id: 3, pid: 2, name: 'Andrew Fuller', eimg: 'https://ej2.syncfusion.com/demos/src/treeview/images/employees/7.png', job: 'Team Lead', hasChild: true },
{ id: 4, pid: 3, name: 'Anne Dodsworth', eimg: 'https://ej2.syncfusion.com/demos/src/treeview/images/employees/1.png', job: 'Developer' },
{ id: 5, pid: 1, name: 'Nancy Davolio', eimg: 'https://ej2.syncfusion.com/demos/src/treeview/images/employees/4.png', job: 'Product Manager', hasChild: true },
{ id: 6, pid: 5, name: 'Michael Suyama', eimg: 'https://ej2.syncfusion.com/demos/src/treeview/images/employees/9.png', job: 'Team Lead', hasChild: true },
{ id: 7, pid: 6, name: 'Robert King', eimg: 'https://ej2.syncfusion.com/demos/src/treeview/images/employees/8.png', job: 'Developer ' },
{ id: 8, pid: 7, name: 'Margaret Peacock', eimg: 'https://ej2.syncfusion.com/demos/src/treeview/images/employees/6.png', job: 'Developer' },
{ id: 9, pid: 1, name: 'Janet Leverling', eimg: 'https://ej2.syncfusion.com/demos/src/treeview/images/employees/3.png', job: 'HR' },
];
return {
fields: { dataSource: dataSource, id: 'id', parentID: 'pid', text: 'name', hasChildren: 'hasChild' },
Template: function(e) {
return {
template: demoVue
};
}
}
},
mounted() {
EventBus.$on('add-task', addTask);
EventBus.$on('destroy-task', deleteTask);
},
methods: {
editTaskHavingId(obj = null) {
console.log('object received', obj.Id);
},
deleteTask(index) {
this.dataSource.splice(index,1);
},
addTask(obj) {
this.dataSource.push(obj);
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-vue-navigations/styles/material.css";
@import "../node_modules/@syncfusion/ej2-vue-buttons/styles/material.css";
.control_wrapper {
display: block;
max-width: 450px;
max-height: 350px;
margin: auto;
overflow: auto;
border: 1px solid #dddddd;
border-radius: 3px;
}
.e-treeview.e-fullrow-wrap .e-text-content {
pointer-events:auto;
}
</style>