2017-06-11 79 views
-1

組件:角2功能不運行始終

import { Component, OnInit } from '@angular/core'; 
import { AF } from "../angularfire.service"; 

@Component({ 
    selector: 'app-login', 
    templateUrl: './login.component.html', 
    styleUrls: ['./login.component.less'] 
}) 
export class LoginComponent implements OnInit { 

    constructor(private afService: AF) { } 

    ngOnInit() { 
    this.afService.checkUser(); 
    } 

} 

裏面的服務功能:

checkUser() { 
    var user = firebase.auth().currentUser; 

    if (user) { 
     this.router.navigate(['/dashboard']); 
    } else { 
     console.log("not logged in"); 
    } 
    } 

基本功能將用戶重定向到,如果他們中記錄的儀表板視圖它的偉大工程時,該視圖(應用程序登錄)通過另一個視圖進行訪問,但如果要通過鍵入url訪問該視圖,該功能不會執行重定向,而是記錄「未登錄」。

+0

我能讓它使用這個解決方法,但它似乎非常hackish:'setTimeout(()=> this.afService.checkUser(),300);' –

+0

不知道什麼firebase.auth()很難告訴我什麼我們正在使用checkUser方法 –

回答

1

第一,因爲它的火力文檔中提到:can view it here

注:currentUser也可能是null,因爲auth對象尚未完成初始化。如果您使用觀察員來跟蹤用戶的登錄狀態,則無需處理此情況。

所以這是解釋你的問題,也解釋了爲什麼你的setTimeout解決,因爲它返回一個可觀察。
第二,通過你上面寫下的語法,我假設你不使用AngularFire2服務(只是缺乏你服務的描述),所以我建議你使用AngularFire2使其更加簡單,並且提供簡單的API與angularfire-database溝通。
我可以建議與AngularFire2後續的解決方案:
組件:

//basically the same. 

服務:

import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database'; 
import { AngularFire, AuthProviders, AuthMethods } from 'angularfire2'; 
import 'rxjs/Rx' ; 
import 'rxjs/add/operator/toPromise'; 
import 'rxjs/add/operator/first'; 

constructor(public af: AngularFire){} 
checkUser() { 
    this.af.auth.first().toPromise().then(user => { 
    if (user) { 
    this.router.navigate(['/dashboard']); 
    } else { 
    console.log("not logged in"); 
    } 
    } 
}); 

只要將它調整到您的代碼,並享受:)