【问题标题】:Meteor FlowRouter: replace path in history for restricted routeMeteor FlowRouter:替换受限路线的历史路径
【发布时间】:2016-12-07 20:26:21
【问题描述】:

我在 Meteor 应用程序中使用 FlowRouter。在一种情况下,资源直到某个日期/时间才可用,因此我们重定向到另一条路线。无论如何用重定向路径替换到受限资源的路由,以便受限资源路由不会出现在浏览器历史记录中。这样做将使历史记录(使用后退、前进)对用户体验更加友好。

我可以在 FlowRouter 的 triggersEnter 中为路线实现这一点,方法是使用以下内容走出 FlowRouter:

if(restricted) {
  return window.location.replace(`/waitingroom/${resourceId}/user/${Meteor.userId()}`);
}

...但这会导致页面重新加载,这是不可取的。

有什么想法吗?

【问题讨论】:

    标签: redirect meteor browser-history flow-router


    【解决方案1】:

    传递给triggersEnter 的函数具有名为redirect 的第二个参数,您可以使用它来重定向到其他页面,而无需重新加载页面并且具有干净的历史记录:

    FR.route('/restricted-route', {
      name: 'RestrictedRoute',
      triggersEnter: [function(context, redirect) {
        redirect('/replace-route');
      }]
    });
    
    FR.route('/replace-route', {
      name: 'ReplaceRoute',
      action() {
        // ...
      }
    });
    

    更新

    我不确定为什么需要同步。无论如何,FlowRouter 在后台使用Page.js 进行导航,如果您不能使用redirect,那么这应该可以:

    FR.route('/restricted-route', {
      name: 'RestrictedRoute',
      triggersEnter: [function(context, redirect) {
        Meteor.setTimeout(() => {
          FlowRouter._page.replace('/replace-route');
        }, 1000);
      }]
    });
    

    注意:这不是公共 API,因此您应该在生产中使用之前仔细测试它。

    【讨论】:

    • redirect 函数必须是同步的,但是在triggersEnter 中我们有一个异步操作,whan whan。这个解决方案不能完全满足我的需要。
    • 太棒了,是的,这行得通,我实际上可以只使用 0 毫秒。感谢内幕消息!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2014-07-13
    • 2016-11-23
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多