From 3e209cc5e748b71d4e80563f2bd9dec0a4540be7 Mon Sep 17 00:00:00 2001 From: Hristo Deshev Date: Mon, 20 Mar 2017 17:24:25 +0200 Subject: [PATCH 1/2] fix(init): Bootstrap Angular on page "navigatingTo" event. Avoid a brief flash of a blank page on slower devices. --- nativescript-angular/platform-common.ts | 16 +++++++++++++--- nativescript-angular/renderer.ts | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/nativescript-angular/platform-common.ts b/nativescript-angular/platform-common.ts index c75d00d47..6b2bd4d29 100644 --- a/nativescript-angular/platform-common.ts +++ b/nativescript-angular/platform-common.ts @@ -61,11 +61,20 @@ export const COMMON_PROVIDERS = [ export class NativeScriptPlatformRef extends PlatformRef { private _bootstrapper: BootstrapperAction; + private static _rootPageRef: WeakRef; constructor(private platform: PlatformRef, private appOptions?: AppOptions) { super(); } + static set rootPage(page: Page) { + NativeScriptPlatformRef._rootPageRef = new WeakRef(page); + } + + static get rootPage(): Page { + return NativeScriptPlatformRef._rootPageRef.get(); + } + bootstrapModuleFactory(moduleFactory: NgModuleFactory): Promise> { this._bootstrapper = () => this.platform.bootstrapModuleFactory(moduleFactory); @@ -149,12 +158,13 @@ export class NativeScriptPlatformRef extends PlatformRef { const navEntry: NavigationEntry = { create: (): Page => { let page = pageFactory({ isBootstrap: true, isLivesync }); + NativeScriptPlatformRef.rootPage = page; if (this.appOptions) { page.actionBarHidden = this.appOptions.startPageActionBarHidden; } - let onLoadedHandler = function () { - page.off("loaded", onLoadedHandler); + let initHandler = function () { + page.off(Page.navigatingToEvent, initHandler); // profiling.stop("application-start"); rendererLog("Page loaded"); @@ -184,7 +194,7 @@ export class NativeScriptPlatformRef extends PlatformRef { }); }; - page.on("loaded", onLoadedHandler); + page.on(Page.navigatingToEvent, initHandler); return page; } diff --git a/nativescript-angular/renderer.ts b/nativescript-angular/renderer.ts index 56b61a7e8..d5b4360a5 100644 --- a/nativescript-angular/renderer.ts +++ b/nativescript-angular/renderer.ts @@ -14,6 +14,7 @@ import { NgView } from "./element-registry"; import { rendererLog as traceLog } from "./trace"; import { escapeRegexSymbols } from "tns-core-modules/utils/utils"; import { Device } from "tns-core-modules/platform"; +import { NativeScriptPlatformRef } from "./platform-common"; import { NativeScriptAnimationDriver } from "./animation-driver"; @@ -46,7 +47,7 @@ export class NativeScriptRootRenderer implements RootRenderer { public get rootView(): View { if (!this._rootView) { - this._rootView = topmost().currentPage; + this._rootView = NativeScriptPlatformRef.rootPage || topmost().currentPage; } return this._rootView; } From 993c8d0b8e9b124a429e1d110eebbbac2b1734af Mon Sep 17 00:00:00 2001 From: Hristo Deshev Date: Mon, 20 Mar 2017 17:25:12 +0200 Subject: [PATCH 2/2] fix(ng-sample): Fix NativeScriptModule import --- ng-sample/app/app.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ng-sample/app/app.ts b/ng-sample/app/app.ts index 2dc904021..0772c7ced 100644 --- a/ng-sample/app/app.ts +++ b/ng-sample/app/app.ts @@ -6,7 +6,8 @@ //profiling.start("application-start"); // "nativescript-angular/application" import should be first in order to load some required settings (like globals and reflect-metadata) -import { NativeScriptModule, platformNativeScriptDynamic } from "nativescript-angular/platform"; +import { NativeScriptModule } from "nativescript-angular/nativescript.module"; +import { platformNativeScriptDynamic } from "nativescript-angular/platform"; import { onAfterLivesync, onBeforeLivesync } from "nativescript-angular/platform-common"; import { NgModule } from "@angular/core"; import { Router } from "@angular/router";