2016-09-24 2 views
3

Ниже мой компонент. Точка ошибки - часть this.router.navigate(). После входа в систему я хочу перенаправить пользователя на другую страницу, что-то похожее на $state.go('dashboard').TypeError: Невозможно прочитать свойство 'router' of null Angular2 Router

import { Component } from '@angular/core'; 
import { Router } from '@angular/router'; 

import { AngularFire } from 'angularfire2'; 

@Component({ 
    templateUrl: 'app/auth/login.component.html' 
}) 

export class LoginComponent { 
    constructor(private af: AngularFire, private router: Router) { } 
    onSubmit(formData) { 
    if(formData.valid) { 
     console.log(formData.value); 
     this.af.auth.login({ 
     email: formData.value.email, 
     password: formData.value.password 
     }).then(function(success) { 
     console.log(success); 
     this.router.navigate(['/dashboard']); 
     }).catch(function(err) { 
     console.log(err); 
     this.router.navigate(['/dashboard']); 
     }) 
    } 
    } 
} 

И я продолжаю получать эту ошибку. Пожалуйста, просветите меня, что я делаю неправильно?

enter image description here

ответ

8

Вы должны использовать Arrow function вместо function внутри .then «s success & catch обратного вызова х. В связи с чем внутри success & catch callback function Вы теряете компонент this (контекст).

Код

this.af.auth.login({ 
    email: formData.value.email, 
    password: formData.value.password 
}).then(
    //used Arrow function here 
    (success)=> { 
     console.log(success); 
     this.router.navigate(['/dashboard']); 
    } 
).catch(
    //used Arrow function here 
    (err)=> { 
     console.log(err); 
     this.router.navigate(['/dashboard']); 
    } 
) 
+0

Спасибо, очень ценит простые простые ответы. Теперь он работает. Мне нужно больше познакомиться с TypScript или es6, что бы это ни было: – Rexford

+0

@Rexford yeah, np, с которым вы будете учиться, спасибо :) –

+0

Вместо использования функций стрелок вы можете передать область действия другой функции? Как в этой ситуации, передавая область this.handleError: .catch (this.handleError)? – Anthony

 Смежные вопросы

  • Нет связанных вопросов^_^