Search code examples
kendo-ui-angular2kendo-treeview

Angular-Kendo treeview focus() method


Trying to focus() on a treeview node in this plunker using an ElementRef. I commented the two lines at the bottom cause they don't work.

Here's the plunker for the code listing below:

https://plnkr.co/edit/aUnechu6glXk5CMFsMex?p=preview

import { Component, ElementRef, ViewChild } from '@angular/core';


 @Component({
     selector: 'my-app',
     template: `
     <kendo-treeview
         #treeview
         [nodes]="data"
         textField="text"
         kendoTreeViewCheckable
         kendoTreeViewExpandable
         kendoTreeViewSelectable

         kendoTreeViewHierarchyBinding
         childrenField="items">
     </kendo-treeview>
 `
 })
 export export class AppComponent {
   @ViewChild("treeview") treeview: ElementRef;
     public data: any[] = [
         {
             text: "Furniture", items: [
                 { text: "Tables & Chairs" },
                 { text: "Sofas" },
                 { text: "Occasional Furniture" }
             ]
         },
         {
             text: "Decor", items: [
                 { text: "Bed Linen" },
                 { text: "Curtains & Blinds" },
                 { text: "Carpets" }
             ]
         }
     ]; 
     //let tree = this.treeview.nativeElement;
     //this.treeview.focus('0');
 }

And the focus() method as per their docs and sample here:

https://www.telerik.com/kendo-angular-ui/components/treeview/api/TreeViewComponent/#toc-focus

How can I focus() programmatically within my component code, as opposed to the click() event posted in their docs ?


Solution

  • The code needs to be executed inside one of Angular's lifecycle hooks or from a method. We need either a ngAfterViewInit or a custom AppComponent.focus() method that ViewChild has time to instantiate the TreeView instance:

    ngAfterViewInit(){
       //XXX: this.treeview is the TreeViewComponent instance set by ViewChild decorator 
       this.treeview.focus('1');
    }