2016-04-18 4 views
0

Ich versuche, neue Seite zu navigieren, wenn get Antwort vom Server:kann nicht auf diese Komponente zugreifen in abonnieren Funktion

import {Component} from '../../node_modules/angular2/core'; 
import {Router} from "../../node_modules/angular2/router"; 
import {Http, Headers, HTTP_PROVIDERS} from '../../node_modules/angular2/http' 

@Component({ 
    selector: 'test-page', 
    templateUrl:'src/login/test.html', 
    providers: [HTTP_PROVIDERS] 
}) 


export class TestPage { 
    constructor(private _router:Router, 
       private _http:Http) { 
    } 

    Test(username, password) { 
     let body = 'test'; 
     let headers = new Headers(); 
     headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
     this._http.post('/api/test', 'test', {headers: headers}) 
     .subscribe(
       response => { 
        this._router.navigateByUrl('Home'); //'this' is not a component 
       }, 
       error => { 
        console.log(error) 
       } 
     ); 
    } 
} 

Aber aus irgendeinem Grund ‚dies‘ kein Zeiger auf Komponente ist, aber es ist ein abonnieren . Kennt jemand den Grund der Ausgabe?

+1

Könnten Sie den Code auch hinzufügen? Ich meine die komplette Funktion wo der Code liegt. Vielen Dank! –

+0

Was war die ** genaue ** Fehlermeldung? –

Antwort

0

Ich glaube, Sie die Variable diese vor dem Aufruf des http Post-Cache sollte, weil innerhalb des Teilnehmer diese an den Teilnehmer selbst beziehen.

let headers = new Headers(); 
var self = this; 
headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
this.http.post('/api/test', 'test', {headers: headers}) 
     .subscribe(
       response => { 
        self._router.navigate(link); 
       }, 
       error => { 
        console.log(error) 
       } 
     ) 
+3

Das ist redundant, wenn Sie '=>' https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Functions/Arrow_functions –

+0

verwenden, weil der Grund in self war. Vielen Dank – Iva

+1

Vereinbart mit @ Günter, mit Pfeilfunktionen, sollte das 'this' Schlüsselwort die Komponenteninstanz sein (wegen lexikalisch dies). Da ist etwas Seltsames. Ich habe das oft benutzt ;-) –

0

Router.navigate muss keine Komponente-Klasseninstanz als Parameter

this._router.navigate(link); 

ungültig ist.

Es erfordert eine Reihe von Routennamen

this._router.navigate(['MyRoute']); 

Siehe auch https://angular.io/docs/ts/latest/api/router/Router-class.html

+1

Ich kann this._router überhaupt nicht nehmen – Iva

+2

Schwer zu sagen, weil Ihre Frage nicht genug Code enthält. In Ihrem Konstruktor benötigen Sie 'Konstruktor (private _router: Router) {}'. –

+1

Versuchen Sie 'console.debug (this._router);' zu Ihrem Konstruktor hinzuzufügen, um zu überprüfen, ob eine Instanz tatsächlich übergeben wurde. Sie können 'Router' nicht in Komponenten injizieren, die keine Routen haben. Stattdessen injizieren Sie 'Router' zu einem globalen Service und injizieren diesen Service in Ihre Komponente. –

Verwandte Themen