如何避免级联 ngOnInit?

How to avoid cascading 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 调用?

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

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

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

如果用户未登录,这将阻止创建子组件。