Nativescript ngOnInit不';在导航到另一个组件之前,我不会运行

Nativescript ngOnInit不';在导航到另一个组件之前,我不会运行,nativescript,angular2-nativescript,Nativescript,Angular2 Nativescript,在我的NativeScript应用程序中,我将路由设置为 export const routes = [ { path: "", component: AppComponent}, { path: "home", component: HomeComponent}, { path: "login", component: LoginComponent}, { path: "news" , component: NewsComponent} ]; 用户通过fir

在我的NativeScript应用程序中,我将路由设置为

export const routes = [
    { path: "",  component: AppComponent},
    { path: "home", component: HomeComponent},
    { path: "login", component: LoginComponent},
    { path: "news" , component: NewsComponent}
];
用户通过firebase登录后,会自动重定向到
HomeComponent
。我应该提到,我有一个用户服务,它从
AppComponent Constructor
启动,确定用户是否已经登录,然后将其重定向到登录或主页

我将console.log()分布在整个组件中,以查看何时触发事件,以便我可以尝试找出代码的放置位置

import {Component, OnInit} from "@angular/core";
import {Page} from "ui/page";
import {RouterExtensions} from 'nativescript-angular/router';
import firebase = require("nativescript-plugin-firebase");

@Component ({
    selector : "home",
    templateUrl: "./pages/home/home.html",
    styleUrls: ["./pages/home/home.css"]
})
export class HomeComponent implements OnInit {

    private router;

    constructor(page: Page, router: RouterExtensions) {

        console.log("HOME CONSTRUCTOR TRIGGERED");
        page.actionBarHidden = false;
        this.router = router;
    }

    ngOnInit(){
        console.log("HOME NGONIT TRIGGERED");
    }

    goToNews(){
        this.router.navigate(["/news"]);
    }

} 
home.html
中,我有一个按钮可以触发
goToNews()
。当我加载应用程序时,我可以在控制台中看到
HomeComponent
constructor何时被触发,但我从未看到
ngOnInit
被触发。奇怪的是,当我点击按钮导航到
/news
时,我看到HomeComponent
ngOnInit
在我的控制台中启动。这就是它的工作方式吗

这一切都归结为一种“全局理解”,在这里,我试图找出加载
HomeComponent
时放下逻辑的最佳位置。我读到把它放在构造函数中是个坏主意,把它放在
ngOnInit
中是很理想的,但是如果
ngOnInit
只是在我尝试离开组件后被触发,我看不出这有什么意义

请帮助我理解这一点


更新:我在
AppComponent
中的
ngOnInit
中添加了一个console.log,当应用程序首次加载时,它确实会被触发。因此,必须是服务中的导航导致
ngOnInit
无法在
HomeComponent
中启动

尝试将router.navigate()放入单独的“区域”:

进口:

import { NgZone } from "@angular/core";
注入:

constructor(private zone: NgZone) { ... }
适用于:

this.zone.run(() => {
    this.router.navigate(["/news"]);
});

找到。

我遇到了完全相同的问题:
ngOnInit
ngAfterViewInit
仅在应用程序加载时调用。到其他组件的任何后续导航都不会触发这些组件中的这些方法。@CarlosMermigas我现在的结论是,通过服务的导航不会触发ngOnInit,因此我必须将一个变量传递回该组件,并在那里完成导航。