在我的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
中使用它是理想的但是我不知道如果{I}尝试到ngOnInit
后才会触发它会有什么意义离开组件。
请帮我理解这一点。
更新:我在ngOnInit
中向AppComponent
添加了一个console.log,并在应用首次加载时触发。因此,必须是服务中的导航导致ngOnInit
无法在HomeComponent
中触发。
答案 0 :(得分:4)
尝试将router.navigate()放入一个单独的"区域":
导入:
import { NgZone } from "@angular/core";
注射:
constructor(private zone: NgZone) { ... }
适用:
this.zone.run(() => {
this.router.navigate(["/news"]);
});
找到here。