流星FlowRouter:替换受限路由的历史路径

问题描述:

我在流星应用中使用FlowRouter。在一种情况下,资源在特定日期/时间之前不可用,所以我们重定向到另一个路由。有没有办法用重定向的路径替换受限资源的路由,以便受限资源路径不会出现在浏览器历史记录中。这样做会使历史(使用后退,前进)更友好。流星FlowRouter:替换受限路由的历史路径

我可以在FlowRouter的triggersEnter的途径实现这一目标,通过步进FlowRouter之外的东西,如:

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

...但是这会导致页面重新加载,这是有点不理想。

任何想法?

功能传递给triggersEnter有第二PARAM命名为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,因此,你应该在生产中使用之前,请仔细测试。

+0

'redirect'函数必须同步,tho和'triggersEnter'中我们有一个异步操作,whan whan。这种解决方案并不完全适合我的需求。 – asking

+0

@asking updated – Khang

+0

太棒了,烨,这工作,我实际上可以使用0毫秒寿。感谢里面的独家新闻! – asking