2016-09-24 5 views
3

以下は私のコンポーネントです。エラーのポイントはthis.router.navigate()部分です。ログイン後、私は$state.go('dashboard')に似た別のページにユーザをリダイレクトしたいと思います。TypeError:nullのプロパティ 'router'を読み取ることができません。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

あなたは.thensuccess & catchコールバックの内側にArrow functionの代わりfunctionを使用する必要があります。そのため、successcatchコールバック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

おかげで、本当に簡単なシンプルな答えを感謝しています。それは今働いている。私はTypescriptやes6にもっと慣れる必要があります。 – Rexford

+0

@Rexfordええ、あなたはあなたが上で働いて学ぶでしょう:) –

+0

矢印機能を使用する代わりに、別の機能にスコープを渡すことができますか?このようにスコープをthis.handleErrorに渡します:.catch(this.handleError)? – Anthony

関連する問題