2016-04-29 5 views
2

Ich habe eine TypeScript-Komponente mit einer JS-Funktion darin. Die Funktion wird von Kendo UI aufgerufen, so dass die Funktion im Javascript-Kontext ausgeführt wird, was bedeutet, dass ich "this" nicht verwenden kann (dies gibt die aufrufende Kendo-Komponente zurück). Ich möchte die Seite in dieser Funktion umleiten, aber ich benutze lieber router.navigate * Funktionen anstelle von location.href ersetzen. Ist es möglich, auf die Router-Instanz im Javascript-Kontext zuzugreifen?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

einige Code Bitte zeigen. –

+0

kann man 'var that = this;' trick verwenden. https://www.google.com/?gfe_rd=cr&ei=20AjV9HqFMaFzAW_grrgCg&gws_rd=ssl#q=javascript+dieses+das –

+1

Haben Sie versucht, {{text: "My Button", klicken Sie auf: this.myButtonCommand.bind (this), Klassenname: "btn"}; '? –

Antwort

1

Ich denke, das

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); 
} 

funktionieren sollte und Sie sollten nur this.router.navigate...() zu nennen der Lage sein, in myButtonCommand()

+1

Danke. Ich möchte auch hinzufügen, dass Ihre "click: this.myButtonCommand.bind (this)" -Methode auch funktioniert. – dstr