流星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,因此,你应该在生产中使用之前,请仔细测试。
'redirect'函数必须同步,tho和'triggersEnter'中我们有一个异步操作,whan whan。这种解决方案并不完全适合我的需求。 – asking
@asking updated – Khang
太棒了,烨,这工作,我实际上可以使用0毫秒寿。感谢里面的独家新闻! – asking