2016-06-21 28 views
0

我的項目中存在一些特定的路線,我不希望用戶訪問,除非他們通過其他路線導航到他們。現在我想我應該通過一個變量,當我轉移到路線。加載路由時,我應該查看該變量並使用它來確定是加載頁面還是重定向到其他頁面。 transitionTo和transitionToRoute僅允許您在控制器和模型中設置變量。我絕對不想爲我的模型添加一個屬性來重定向,所以我認爲它應該在控制器中設置變量。加載路由時,我可以調用諸如activate,beforeModel或afterModel之類的函數,但所有這些都在控制器創建之前運行。這意味着他們將無法讀取在transitionTo或transitionToRoute期間傳遞給控制器​​的變量。在控制器中,我可以調用成功讀取控制器變量的init,但是當正確訪問頁面(通過transitionTo)時,init函數會導致它無法第一次渲染。如果我稍後在同一個會話中進行操作,它會正確呈現。Ember js - 通過URL訪問頁面時重定向

在這一點上,我假設必須有一個更簡單的方法來檢查用戶是否正確訪問了頁面。似乎沒有辦法在transitionTo期間設置路由變量,但是也許我可以在路由加載時傳遞參數並讀取它們?任何有識之士將不勝感激。

回答

2

在您的路由器內,您可以使用setupController鉤子。其簽名是

setupController(controller, context, transition) { 
    if (controller && (context !== undefined)) { 
     set(controller, 'model', context); 
    } 
    }, 

最後一個參數被稱爲transition並且是可選的。它包含有關用戶如何訪問路線的信息。無論是通過導航還是通過應用程序本身,如果用戶刷新頁面或直接輸入URL,它就是空的。

+0

轉換不是API文檔的一部分https://emberjs.com/api/ember/3.0/classes/Route/methods/setupController?anchor=setupController,但它是一個隱藏參數。這是否意味着它將在未來的Ember版本中消失? – michaelklopf