2016-12-07 60 views
1

我在流星應用中使用FlowRouter。在一種情況下,資源在特定日期/時間之前不可用,所以我們重定向到另一個路由。有沒有辦法用重定向的路徑替換受限資源的路由,以便受限資源路徑不會出現在瀏覽器歷史記錄中。這樣做會使歷史(使用後退,前進)更友好。流星FlowRouter:替換受限路由的歷史路徑

我可以在FlowRouter的triggersEnter的途徑實現這一目標,通過步進FlowRouter之外的東西,如:

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

...但是這會導致頁面重新加載,這是有點不理想。

任何想法?

回答

1

功能傳遞給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