4

私のNativeScriptアプリでは、ルートを次のように設定しています

export const routes = [
    { path: "",  component: AppComponent},
    { path: "home", component: HomeComponent},
    { path: "login", component: LoginComponent},
    { path: "news" , component: NewsComponent}
];

ユーザーが firebase を介してログインすると、ユーザーは自動的に にリダイレクトされますHomeComponentAppComponent Constuctorユーザーが既にログインしているかどうかを判断し、ログインまたはホームにリダイレクトする から起動されるユーザー サービスがあることに言及する必要があります。

コンポーネント全体に 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コンストラクターがトリガーされたときにコンソールで確認できますが、トリガーされることはありませんngOnInit。奇妙なことに、ボタンをクリックして に移動すると、コンソールで/newsHomeComponent が発火するのが見えます。ngOnInitこれは、動作するはずの方法ですか?

これはすべて、ロードされたときにロジックを配置するのに最適な場所を見つけようとする「全体像の理解」に帰着しHomeComponentます。コンストラクターに入れるのは悪い考えであり、それを入れるのが理想的であると読みましたが、コンポーネントから離れようとした後にのみトリガーされるngOnInit場合、これがどのように意味を持つのかわかりません。ngOnInit

これを理解するのを手伝ってください。

更新: console.log を追加しましたngOnInitAppComponent、これはアプリが最初に読み込まれたときに発生します。したがって、 で起動ngOnInitしない原因となっているのは、サービスのナビゲーションであるに違いありませんHomeComponent

4

1 に答える 1