- Home
- Forum
- Angular - EJ 2
- Tree View in Dropdown
Tree View in Dropdown
Hi
Attachment: demo_971e3dbb.zip
I need a function and design option as a Tree View in Dropdown in Syncfusion have dropdown group but i need in Tree Structure , Herewith attached a Screenshot for your Reference, Could please help me to achieve this design functionality .
Kindly Reply as soon as Possible
Thanks in Advance .
Regards,
Sunithra.C
Attachment: demo_971e3dbb.zip
SIGN IN To post a reply.
17 Replies
PO
Prince Oliver
Syncfusion Team
June 10, 2019 10:06 AM UTC
Hello Sunithra,
Good day to you.
We have prepared a sample with DropDownList control and TreeView control in the popup as per your requirement. Please find the sample in the following location: https://stackblitz.com/edit/angular-ht1jii
In the above sample, we have rendered the TreeView control inside DropDownList ’s popup on the open event. Then on the nodeSelected event, we have updated the selected item in the DropDownList. Refer to the following code.
|
public onOpen = () => {
// modifying the dropdownlist's classes for styling
this.dropdownObj.popupObj.element.firstElementChild.className = "e-content overflow";
// rendering the treeview only on first time
if (this.treeObj == null || this.treeObj == undefined) {
this.treeObj = new TreeView({
fields: { dataSource: this.localData, id: 'id', parentID: 'pid', text: 'name', hasChildren: 'hasChild' },
// use the nodeselected event to add the text to dropdown's input element.
nodeSelected: (args: any) => {
let drop = (document.getElementById("games") as any).ej2_instances[0];
drop.inputElement.value = args.nodeData.text;
}
});
this.treeObj.appendTo('#tree');
}
} |
We can get selected value using either DropDownList’s instance or TreeView’s instance. Kindly refer to the following code.
|
document.getElementById("btn").addEventListener("click", function () {
//Using DropDownList's instance
alert("Using DropDownList's instance - " + dropDownListObj.element.value);
//Using TreeView's instance
alert("Using TreeView's instance - " + treeObj.getTreeData(treeObj.selectedNodes[0])[0].name);
}); |
Let us know if you need any further assistance on this.
Regards,
Prince
SU
sunithra
July 16, 2019 10:22 AM UTC
Hi
if i load the datasource inside function innerHtml is not getting append.
it is getting append only if i reload the datasource only in ngOnInit .
Thanks in Advance.
Regards,
Sunithra.C
PO
Prince Oliver
Syncfusion Team
July 16, 2019 01:40 PM UTC
Hello Sunithra,
Thank you for your update.
We have checked the reported scenario. We have dynamically set the datasource in the open event and it is working fine in our end. Please find the sample from below link,
However we couldn’t replicate the reported issue in our end. Kindly check the above sample in your end. If the issue persists, please share below details. This will help us to check and provide exact solution at our end.
- Code snippet
- Issue reproducing sample
- If possible reproduce the issue in our provided sample
Regards,
Prince
SU
sunithra
August 5, 2019 10:46 AM UTC
Hi
I am having problem on fetching data from the dropdown,record is coming on the grid but in the drop down its not coming,as mentioned below by using this type parentId.
<ejs-dropdownlist id='games' cssClass='question-label-popup' #sample1 formControlName="parentId"
(open)='onOpen()'>
<ng-template #noRecordsTemplate>
<div id='tree' class="labelList"></div>
</ng-template>
</ejs-dropdownlist>
sample Array below
this.labelData = [{
hasChild: true,
id: 83,
labelName: "formPageLAbel",
labelPageType: 2,
labelType: 1,
name: "formPageLAbel",
organisationId: 57,
parentId: 0,
userId: 2444
}, {
hasChild: false,
id: 84,
labelName: "labelunder",
labelPageType: 2,
labelType: 1,
name: "labelunder",
organisationId: 57,
parentId: 83,
pid: 83,
userId: 2444
}, {
hasChild: false,
id: 84,
labelName: "labelunder",
labelPageType: 2,
labelType: 1,
name: "labelunder",
organisationId: 57,
parentId: 83,
pid: 83,
userId: 2444
}];
Regards,
Sunithra.C
AB
Ashokkumar Balasubramanian
Syncfusion Team
August 6, 2019 10:29 AM UTC
Hello Sunithra,
Sorry for the inconvenience.
Based on your provided code blocks and replication steps to bind the labelData array as dataSource and properly mapping the parentId as fields Object in open event, but data are properly shown in DropDownList TreeView. Could you please check the below code block and sample?
|
<form [formGroup]="skillForm">
<h4> DropDown TreeView</h4>
<ejs-dropdownlist formControlName="parentId" name="parentId" id='games' #sample1 (open)='onOpen()'>
<ng-template #noRecordsTemplate>
<div id='tree'></div>
</ng-template>
</ejs-dropdownlist>
</form> |
|
constructor(private fb: FormBuilder) {
this.createForm();
}
createForm() : void {
this.skillForm = this.fb.group({
parentId: ['', Validators.required],
});
}
public treeObj: TreeView;
public labelData: { [key: string]: Object } [] = null;
public onOpen = () => {
this.labelData = [{
hasChild: true,
id: 83,
labelName: "formPageLAbel",
labelPageType: 2,
labelType: 1,
name: "formPageLAbel",
organisationId: 57,
parentId: 0,
userId: 2444
}, {
hasChild: false,
id: 84,
labelName: "labelunder",
labelPageType: 2,
labelType: 1,
name: "labelunder",
organisationId: 57,
parentId: 83,
pid: 83,
userId: 2444
}, {
hasChild: false,
id: 84,
labelName: "labelunder",
labelPageType: 2,
labelType: 1,
name: "labelunder",
organisationId: 57,
parentId: 83,
pid: 83,
userId: 2444
}];
// modifying the dropdownlist's classes for styling
this.dropdownObj.popupObj.element.firstElementChild.className = "e-content overflow";
// rendering the treeview only on first time
if (this.treeObj == null || this.treeObj == undefined) {
this.treeObj = new TreeView({
fields: { dataSource: this.labelData, id: 'id', parentID: 'pid', text: 'name', hasChildren: 'hasChild' },
// use the nodeselected event to add the text to dropdown's input element.
nodeSelected: (args: any) => {
let drop = (document.getElementById("games") as any).ej2_instances[0];
drop.inputElement.value = args.nodeData.text;
}
});
this.treeObj.appendTo('#tree'); |
Note: Could you please ensure whether you have properly mapping the parentId and id fields for fields property in TreeView?
Could you please check the above provided sample and get back to us, if you require any further assistance on this?
Regards,
Ashokkumar B.
SU
sunithra
August 22, 2019 12:11 PM UTC
Hi
Attachment: angularht1jii349ume_42ec1766.zip
I need a help on this to fix this issue,if the record is not available on the drop down,we need a message no records found (it should show on the) drop down. Kindly find the attachment for your reference.
Thanks in Advance.
Regards,
Sunithra.C
Attachment: angularht1jii349ume_42ec1766.zip
VK
Vinoth Kumar Sundara Moorthy
Syncfusion Team
August 23, 2019 12:01 PM UTC
Hi Sunithra,
Good day to you.
We have achieved your requirement by rendering the Treeview in beforeOpen event. In open event, we will assign the value “No records found” when Treeview dataSource is empty. Please refer the below code snippet,
[app.component.html]
|
<ejs-dropdownlist formControlName="parentId" name="parentId" id='games' #sample1 (beforeOpen)='beforeOpen($event)' (open)="onOpen($event)">
<ng-template #noRecordsTemplate>
<div id='tree'></div>
</ng-template>
</ejs-dropdownlist> |
[app.component.ts]
|
public onOpen(args){
if(this.labelData.length == 0){
this.dropdownObj.popupObj.element.querySelector('#tree').innerHTML = "No records found";
}
} |
Could you please check the above details and get back to us if you need any further assistance on this?
Regards,
Vinoth Kumar S
TH
thowfik
September 24, 2019 09:52 AM UTC
Hi
I need a ChangeEvent or OnSelectEvent in the Tree View Dropdown, when i select the value in the dropdown it should get selected and then close dropdown popup.
I have the sample stackblitz url for your reference.
https://stackblitz.com/edit/angular-ht1jii?file=app.component.html
https://stackblitz.com/edit/angular-ht1jii?file=app.component.html
Thanks in Advance .
Regards,
Thowbik.
AB
Ashokkumar Balasubramanian
Syncfusion Team
September 25, 2019 05:58 AM UTC
Hi Thowbik,
For this requirement, you can use the hidePopup method to close the popup element on Drop down List component in nodeSelected event of TreeView component. Please refer the below code block.
|
let drop = (document.getElementById("games") as any).ej2_instances[0];
drop.inputElement.value = args.nodeData.text;
drop.hidePopup(); |
Kindly check the modified sample and get back to us if you need any further assistance.
Regards,
Ashokkumar B.
TH
thowfik
October 1, 2019 10:41 AM UTC
Hi Ashokkumar,
Thanks for your valuable reply,
I have multiple levels, if child have another one or more child then how can i populate data,
for example
parent 1-->
child 1
child 2
parent 2-->
child 1-->
sub child 1
sub child 2
child 2
Thanks in Advance
Regards
Thowfik
GG
Gopi Govindasamy
Syncfusion Team
October 2, 2019 06:28 AM UTC
Hi Thowfik,
Thanks for your update,
We would like to inform you that, we are provided “field” property to FieldsSettingsModel. Binds the field settings for child nodes or mapping field for nested nodes objects that contain array of JSON objects. We have prepared sample based on your requirement with nested tree node. Please find the code snippet for your reference.
[nested data]
|
{
"nodeId": "04", "nodeText": "Pictures", "icon": "folder", "expanded": true,
"nodeChild": [
{
"nodeId": "04-01", "nodeText": "Camera Roll", "icon": "folder", "expanded": true,
"nodeChild": [
{ "nodeId": "04-01-01", "nodeText": "WIN_20160726_094117.JPG"},
{ "nodeId": "04-01-02", "nodeText": "WIN_20160726_094118.JPG"}
]
},
{ "nodeId": "04-02", "nodeText": "Wind.jpg", "icon": "images" },
{ "nodeId": "04-03", "nodeText": "Stone.jpg", "icon": "images" }
]
},
|
Output
Regards,
Gopi G.
SW
swatijal70
January 3, 2020 09:29 AM UTC
I am getting the following error while using "https://stackblitz.com/edit/angular-ht1jii?file=app.component.ts" link:
ERROR TypeError: Cannot read property 'popupObj' of undefined
at CategoryComponent.onOpen (master-master-module-ngfactory.js:1884)
at Object.handleEvent (master-master-module-ngfactory.js:1550)
at handleEvent (vendor.js:39764)
at callWithDebugContext (vendor.js:40857)
at Object.debugHandleEvent [as handleEvent] (vendor.js:40560)
at dispatchEvent (vendor.js:37223)
at vendor.js:38703
at SafeSubscriber.schedulerFn [as _next] (vendor.js:33073)
at SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub (vendor.js:513583)
at SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next (vendor.js:513521)
Kindly resolve my issue.
SN
Sevvandhi Nagulan
Syncfusion Team
January 6, 2020 12:59 PM UTC
Hi Sunithra,
We have checked the shared sample. Unfortunately, we cannot get the reported issue in the shared sample. And the shared sample working fine in our end. We suspect that you did not defined the div element in the noRecordsTemplate. Please check the below sample,
Regards,
Sevvandhi N
RN
Raza Nasir
June 6, 2021 01:49 PM UTC
Hi Syncfusion team,
I'm trying to load EJ2 dropdown and then I have to show the selected value in that dropdown upon loading this dropdown component. But when I try it with the following way, it gives me this error "Cannot read property 'popupObj' of undefined". Kindly, help me out to fix this issue. Also, let me what change is required in the html to show the selected value in the dropdown on loading the component.
SN
Sevvandhi Nagulan
Syncfusion Team
June 7, 2021 06:10 AM UTC
Hi Raza,
Greetings from Syncfusion support.
We checked your query. We provided the separate DropDownTree component which meets your requirement. So we suggest that you to use the DropDownTree component. Please refer the below demo sample and UG documentation link.
Regards,
Sevvandhi N
In fact, this component only loads its data upon opening the dropdown by clicking on it. I want a way that when my xyz component initialized, in which I'm using this EJ2 dropdown component. then it should load up with its provided data. Also, if I'm loading my xyz component for updating the data then previously save data must be reflected in the EJ2 dropdown component and upon opening this EJ2 dropdown component, the already saved value must be show as selected.
Kindly help me out.
Thanks.
SN
Sevvandhi Nagulan
Syncfusion Team
June 23, 2021 10:35 AM UTC
Hi Raza,
We checked your query. We considered XYZ component as textbox component and prepared the sample based on the mentioned scenario. In the change event of textbox component, add the item using addItem method. Refer the following sample.
Kindly get back to us for further assistance.
Regards,
Sevvandhi N
SIGN IN To post a reply.
- 17 Replies
- 9 Participants
-
SU sunithra
- Jun 7, 2019 12:33 PM UTC
- Jun 23, 2021 10:35 AM UTC