2017-05-08 64 views
0

我有两个组件与父母和孩子的关系。父组件的ngOnInit方法检查用户是否登录,如果没有登录,则导航到登录页面。如何避免级联ngOnInit?

class ParentComponent implements OnInit{ 
    ngOnInit(){ 
     if(!authService.loggedIn){ 
      //navigate to login screen code 
      return; 
     } 
    } 
} 

class ChildComponent implements OnInit{ 
    ngOnInit(){ 
     /** POINT TO BE NOTED **/ 
     // this function is also called even if ngOnInit 
     // of parent navigates to different component and returns. 
     // do some stuff with userService.token 
     // but because token isn't available the calls fail 
    } 
} 

如果父组件想要导航到其他组件,如何阻止此级联OnInit调用?

回答

3

IMO,你不应该检查用户是否登录并离开组件。您应该改用guard来做到这一点。

但是,要回答你的问题,你可以只使用

<child *ngIf="isLoggedIn()"></child> 

这将防止子组件被创建,如果用户没有登录。

+0

我知道网址防护,但我认为从父母的ngOnInit返回会工作,但它不会那样工作。 URL防护无疑是正确的做法,它发生在组件初始化之前的导航过程中。非常感谢,伙计。 – mdanishs