2017-06-11 53 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"); 
    } 
    } 
}); 

只要将它调整到您的代码,并享受:)