私のNativeScriptアプリでは、ルートを次のように設定しています
export const routes = [
{ path: "", component: AppComponent},
{ path: "home", component: HomeComponent},
{ path: "login", component: LoginComponent},
{ path: "news" , component: NewsComponent}
];
ユーザーが firebase を介してログインすると、ユーザーは自動的に にリダイレクトされますHomeComponent
。AppComponent 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
。奇妙なことに、ボタンをクリックして に移動すると、コンソールで/news
HomeComponent が発火するのが見えます。ngOnInit
これは、動作するはずの方法ですか?
これはすべて、ロードされたときにロジックを配置するのに最適な場所を見つけようとする「全体像の理解」に帰着しHomeComponent
ます。コンストラクターに入れるのは悪い考えであり、それを入れるのが理想的であると読みましたが、コンポーネントから離れようとした後にのみトリガーされるngOnInit
場合、これがどのように意味を持つのかわかりません。ngOnInit
これを理解するのを手伝ってください。
更新: console.log を追加しましたngOnInit
がAppComponent
、これはアプリが最初に読み込まれたときに発生します。したがって、 で起動ngOnInit
しない原因となっているのは、サービスのナビゲーションであるに違いありませんHomeComponent
。