TypeError: undefined is not an object (evaluating 'parentOutlet.peekState')

TypeError: undefined is not an object (evaluating 'parentOutlet.peekState')

我有一个多页面 angular-nativescript 应用程序(带有侧边栏和页面路由器插座)。当我第一次启动应用程序时,我可以在侧边抽屉上的页面之间导航,但几分钟后(比如 10 分钟),尝试从一个页面导航到另一个页面会使应用程序崩溃并显示以下消息:

JavaScript error:
file:///app/tns_modules/nativescript-angular/zone-js/dist/zone-nativescript.js:826:78:
JS ERROR Error: Uncaught (in promise): TypeError: undefined is not an object (evaluating 'parentOutlet.peekState')
upsertModalOutlet@file:///app/tns_modules/nativescript-angular/router/ns-location-strategy.js:506:41
file:///app/tns_modules/nativescript-angular/router/ns-location-strategy.js:128:44
forEach@[native code]
pushStateInternal@file:///app/tns_modules/nativescript-angular/router/ns-location-strategy.js:111:54
pushState@file:///app/tns_modules/nativescript-angular/router/ns-location-strategy.js:85:31
pushState@file:///app/tns_modules/nativescript-angular/router/ns-platform-location.js:49:40
pushState@file:///app/tns_modules/@angular/common/bundles/common.umd.js:511:45
go@file:///app/tns_modules/@angular/common/bundles/common.umd.js:286:45
setBrowserUrl@file:///app/tns_modules/@angular/router/bundles/router.umd.js:4007:33
file:///app/tns_modules/@angular/router/bundles/router.umd.js:3960:40
file:///app/tns_m<\M-b\M^@\M-&>
* JavaScript call stack:
(
0 UIApplicationMain@[native code]
1 start@file:///app/tns_modules/tns-core-modules/application/application.js:272:26
2 run@file:///app/tns_modules/tns-core-modules/application/application.js:300:10
3 bootstrapNativeScriptApp@file:///app/tns_modules/nativescript-angular/platform-common.js:185:26
4 bootstrapApp@file:///app/tns_modules/nativescript-angular/platform-common.js:103:38
5 bootstrapModule@file:///app/tns_modules/nativescript-angular/platform-common.js:87:26
6 anonymous@file:///app/main.js:7:57
7 evaluate@[native code]
8 moduleEvaluation@:1:11
9 promiseReactionJob@:1:11
)
*
Terminating app due to uncaught exception 'NativeScript encountered a fatal error: Error: Uncaught (in promise): TypeError: undefined is not an object (evaluating 'parentOutlet.peekState')
upsertModalOutlet@file:///app/tns_modules/nativescript-angular/router/ns-location-strategy.js:506:41
file:///app/tns_modules/nativescript-angular/router/ns-location-strategy.js:128:44
forEach@[native code]
pushStateInternal@file:///app/tns_modules/nativescript-angular/router/ns-location-strategy.js:111:54
pushState@file:///app/tns_modules/nativescript-angular/router/ns-location-strategy.js:85:31
pushState@file:///app/tns_modules/nativescript-angular/router/ns-platform-location.js:49:40
pushState@file:///app/tns_modules/@angular/common/bundles/common.umd.js:511:45
go@file:///app/tns_modules/@angular/common/bundles/common.umd.js:286:45 setBrowserUrl@file:///app/tns_modules/@angular/router/bundles/router.umd.js:4007:33
file:///app/tns_modules/@angular/router/bundles/router.umd.js:3960:40

它的重现性相当可靠,但我每次都得等 10 分钟

问题似乎与我处理 angular 版本之间路由的方式有关。在 angular 4 中,我使用了 <router-outlet> 并且在它周围的 <StackLayout> 中有 tkMainContent。当我切换到在 angular 6 中使用 <page-router-outlet> 时,我需要将 tkMainContent 移动到 <page-router-outlet>

内部

我有同样的错误,我发现是因为我在main.ts文件中使用了这个:

platformNativeScriptDynamic({createFrameOnBootstrap: true}).bootstrapModule(AppModule);

将其更改为:

platformNativeScriptDynamic({createFrameOnBootstrap: false}).bootstrapModule(AppModule);

platformNativeScriptDynamic().bootstrapModule(AppModule);

解决了问题。

在尝试加载使用根视图显示模态的模态时尤其会出现此错误。

根据 NativeScript 文档,如果您的应用程序不使用 page-router-outlet,您应该使用 createFrameOnBootstrap,因为没有它您将无法获得默认的 PageFrame,这意味着您将无法将它们注入组件或显示 ActionBar

我的应用程序有 page-router-outlet,因此设置 createFrameOnBootstrap: false 解决了这个问题。