Aurelia - 通过“setRoot”切换到另一个应用程序并处理承诺拒绝

时间:2017-08-31 10:12:32

标签: javascript aurelia aurelia-router

我正在构建具有独立公共和私有部分的应用程序(换句话说,它是由2个内部应用程序组合而成 - 在aurelia.setRoot ...的上下文中):

  • 公共部分主要是登录技工
  • 私有部分在成功登录后可以使用

申请流程如下:

  1. 导航到网址,例如:http://app/user/details/2(这意味着想要查看id = 2的用户的详细信息页面)
  2. 应用程序检查用户是否已登录 - 如果是,则转到步骤4,否则转到3.
  3. 用户重定向到应用程序的公共部分 - 登录页面 - 但不更改ulr
  4. 当用户被登录时,我正在调用aurelia.setRoot(PRIVATE)并且处理请求 - 页面上已加载用户详细信息
  5. 在'setRoot'调用之间,我通过调用:

    来清除appRouter

    appRouter.reset(); appRouter.deactivate();

    导航历史记录未被清除 - 允许在成功登录

    后处理ulr

    一切正常(开心流程),直到请求页面出于任何原因将从VM activate方法返回被拒绝的承诺

    从我的观察:

    • appRouter.history.previousLocation设置为http://app/user/details/2 - 我不清楚 - 以前的位置应为空/ null / undefined
    • 从源代码

      调用appRouter.restorePreviousLocation

      function restorePreviousLocation(router) { let previousLocation = router.history.previousLocation; if (previousLocation) { router.navigate(router.history.previousLocation, { trigger: false, replace: true }); } else if (router.fallbackRoute) { router.navigate(router.fallbackRoute, { trigger: true, replace: true }); } else { logger.error('Router navigation failed, and no previous location or fallbackRoute could be restored.'); } }

    由于previosLocation值与当前网址相同,我的应用程序只是闷闷不乐......

    我的期望是,重定向到配置的`fallbackRoute

    我如何处理这种情况?

0 个答案:

没有答案