2016-04-29 17 views
2

У меня есть компонент TypeScript с функцией JS. Функция вызывается Kendo UI, поэтому функция выполняется в контексте Javascript, что означает, что я не могу использовать «this» (это возвращает компонент Kendo вызывающего абонента). Я хочу перенаправить страницу в эту функцию, но я скорее использую функции router.navigate * вместо location.href replace. Возможно ли получить доступ к экземпляру маршрутизатора в контексте Javascript?Access Router in Javascript code

export class MyComponent implements AfterViewInit { 
    //template: `<div #grid></div>` 
    @ViewChild('grid') private grid: ElementRef; 

    ngAfterViewInit() { 
     this.configureGrid(); 
    } 

    private configureGrid() { 
     let kendoGrid: kendo.ui.Grid = jQuery(this.grid.nativeElement).data("kendoGrid"); 
     let kendoColumn: kendo.ui.GridColumn = {}; 
     kendoColumn.command = { text: "My Button", click: this.myButtonCommand, className: "btn" }; 
     kendoGrid.columns.add(kendoColumn); 
    } 

    myButtonCommand(e) { 
     //redirect here 
    } 
} 
+2

Пожалуйста, покажите код. –

+0

вы можете использовать 'var that = this;' trick. https://www.google.com/?gfe_rd=cr&ei=20AjV9HqFMaFzAW_grrgCg&gws_rd=ssl#q=javascript+this+that –

+1

Вы пробовали '{текст:« Моя кнопка », нажмите: this.myButtonCommand.bind (это), className: "btn"}; '? –

ответ

1

Я думаю, что это должно работать

private configureGrid() { 
    let kendoGrid: kendo.ui.Grid = jQuery(this.grid.nativeElement).data("kendoGrid"); 
    let kendoColumn: kendo.ui.GridColumn = {}; 
    kendoColumn.command = { text: "My Button", click: (e) => this.myButtonCommand(e), className: "btn" }; 
    kendoGrid.columns.add(kendoColumn); 
} 

, и вы должны быть в состоянии просто позвонить this.router.navigate...() в myButtonCommand()

+1

Спасибо. Я также хочу добавить, что ваш метод «click: this.myButtonCommand.bind (this)» тоже работает. – dstr