【问题标题】:Routing Strategies In Angular 2.0. Can i mantain my own history stack?Angular 2.0 中的路由策略。我可以维护自己的历史堆栈吗?
【发布时间】:2016-12-18 05:45:16
【问题描述】:

我在 Angular 2.0 中遇到了一个特殊的情况,带有路由

  1. 我不想重复导航。即如果用户转到页面 a -> 然后转到页面 b-> 然后再次转到页面 a-> 然后转到页面 c 并且当用户按下后退按钮时,用户应该被重定向到页面 b 而不是页面 a . 我想要实现的是多次按下后退按钮不应多次显示同一页面。 因此,如果我执行 a>b>c>a>c>b>a>c>b>a 然后开始按回:页面 a、b、c 应该只出现一次,而不是基于常规浏览器行为。

  2. 成功登录后,如果我按下返回按钮,登录屏幕不应该出现,而是应该退出或类似空白 URL 而不是登录 URL。

对如何实现有任何建议?

我应该使用NavigationStart/NavigationEnd 并在那里写下我的逻辑吗?

【问题讨论】:

  • 你能澄清一下吗?在要点 1 中,我不明白“......用户应该被重定向到页面 b 而不是页面 a”。还有要点 2,如果点击后退按钮,您想退出应用程序吗?
  • @ppovoski 当然,我的意思是,当我按下后退按钮时,所有页面都应该只看到一次,所以按下后退按钮页面 a 不应该在浏览器后退按钮上打开超过一次,第二点我的意思是:如果我已经成功登录然后按浏览器返回按钮,那么它不应该返回登录。它应该是浏览器中没有 URL 或退出。
  • 首先,在问题中添加说明,它也会对其他人有所帮助。其次,要明确一点,如果你转到 pageA,然后是 pageB,然后是 pageA,然后是 pageC……然后开始反击,你期望会发生什么?
  • @ppovoski :我想要的是多次按下后退不应多次显示同一页面,如果我使用默认浏览器行为,那么我将获得页面 A 两次,这是我不想要的。 !
  • 如果你去 A > B > A > C,然后反击,你去 B 而不是 A 的理由是什么?仅仅因为 A 在链中较早被击中?所以如果你走A > B > A > C > A > C,那么反击它应该去B吗?我想看看这个用例。

标签: angular angular2-routing


【解决方案1】:

我通过编写自己的 LocationStrategy 解决了以下问题

@Injectable()
export class TestClass implements LocationStrategy {

path(includeHash?: boolean) : string{
       //write my own logic here 
    }
pushState(state: any, title: string, url: string, queryParams: string) : void{
         console.log("push state called");
        //write my own logic here
    }
}

在我的 app.module.ts 中

  {provide:LocationStrategy,useClass:TestClass },

这样我就可以达到我的要求了。

【讨论】:

  • 你能提供一个更强大的例子吗?例如,您是如何解决原始问题逻辑的,因为您在此处的回答并未真正涵盖解决方案。
  • 如果您能用其他人(包括我)可以从中受益的有效解决方案更新您的答案,我将不胜感激。
猜你喜欢
  • 2020-09-10
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2014-01-11
  • 2014-01-21
  • 1970-01-01
  • 2019-07-30
  • 2011-06-01
相关资源
最近更新 更多