【问题标题】:Recommended way to handle backwards routing in Nativescript/angular?在 Nativescript/angular 中处理反向路由的推荐方法?
【发布时间】:2019-02-27 14:51:54
【问题描述】:

随着页码的增加,我开始遇到防止重复框架的困难,尤其是在使用侧抽屉时。如果我导航 A -> B -> A,我将得到 3 个实例,A 的 2 个和 B 的 1 个。这意味着我必须以某种方式确定导航是真正的导航还是“backToPreviousPage”。

理想情况下,我应该能够输入一条路线,它会智能地决定要做什么,例如:

router.navigate(['A'])
router.navigate(['B'])
router.navigate(['A'])

应该等于 A - 导航 -> B - backToPreviousPage -> A

现在,我的计划是提供一项服务来记录导航到的最后一条路线。这样我就可以只做 myService.navigate() ,它会根据当前路由是否与前一个匹配,自动决定是否应该进行真正的导航或使用 routerExtensions.backToPreviousPage()。

不过,在我这样做之前,我想确保没有什么明显的方式来处理这个问题。这种做法似乎是一种肮脏的方式。对我来说,Nativescript 路由器似乎应该默认处理这个问题,但我已经确认我的 A -> B -> A 场景会重新运行 ngOnInit,而且我还没有看到任何可能导致这种情况发生的选项。

【问题讨论】:

  • 只要你拨打navigate,它只会将当前页面添加到历史记录并导航到新路线。您可以多次导航到一个页面,它就像在浏览器环境中发生的一样。您可以使用NSLocationStrategy 来确定您的历史记录并根据需要返回。
  • 这是我最初的想法,但我已经研究 NSLocationStrategy 有一段时间了,我没有看到任何有助于检索任何历史的东西。你确定 NSLocationStrategy 是正确的吗?

标签: nativescript angular2-nativescript


【解决方案1】:

页面路由器出口应跟踪堆栈/历史记录中的内容。根据 url 段,您可以决定是返回还是导航到新组件。

constructor(pageRouterOutlet: PageRouterOutlet) {
    // `outlet` is private
    (<any>pageRouterOutlet).outlet.states.forEach((state) => {
        console.log(state.segmentGroup);
    });
}

【讨论】:

    猜你喜欢
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2015-07-22
    • 2011-08-08
    • 1970-01-01
    相关资源
    最近更新 更多