我在导航方面遇到了一些麻烦。我正在使用新的拆分窗格。当用户注销时,我在app.component中执行setRoot并将其设置为登录页面。当用户登录observable时,也会在app.component中获取登录值并完成setRoot(TabsPage)。当我尝试在离子拆分窗格内导航时,由于NavControllerBase中的队列为空,它会引发异常..
我在此存储库中重新创建了相同的错误:https://github.com/oddcb/ionic-split-pane-example
首先尝试导航菜单,而不单击“主页”视图中的按钮。然后单击按钮并再次尝试导航。
它崩溃了:
TypeError: Cannot read property 'push' of null
at NavControllerBase._queueTrns (http://localhost:8100/build/main.js:45173:20)
at NavControllerBase._setPages (http://localhost:8100/build/main.js:45103:21)
at NavControllerBase.setRoot (http://localhost:8100/build/main.js:45077:21)
at SafeSubscriber._next (http://localhost:8100/build/main.js:84883:39)
at SafeSubscriber.__tryOrUnsub (http://localhost:8100/build/main.js:1354:16)
at SafeSubscriber.next (http://localhost:8100/build/main.js:1303:22)
at Subscriber._next (http://localhost:8100/build/main.js:1256:26)
at Subscriber.next (http://localhost:8100/build/main.js:1220:18)
at Subject.next (http://localhost:8100/build/main.js:7729:25)
at SplitCommunication.setRootPage (http://localhost:8100/build/main.js:20749:26)
at MenuLevel1.viewLevel2 (http://localhost:8100/build/main.js:84724:33)
at CompiledTemplate.proxyViewClass.View_MenuLevel10.handleEvent_13 (/AppModule/MenuLevel1/component.ngfactory.js:201:34)
at CompiledTemplate.proxyViewClass.<anonymous> (http://localhost:8100/build/main.js:134705:37)
at HTMLButtonElement.<anonymous> (http://localhost:8100/build/main.js:58120:53)
at t.invokeTask (http://localhost:8100/build/polyfills.js:3:10284)
有什么想法吗?
答案 0 :(得分:1)
问题是我有一个rxjs订阅作为失败导航的来源。当我在父堆栈上执行setRoot时,订阅未被取消订阅。在更换父堆栈后的导航中,旧订阅将尝试调用导航,然后由于旧堆栈消失而失败。
通过在ionViewWillUnload生命周期钩子中取消订阅来解决。