2013-11-23 36 views
-1

目前在我的一些控制器中,我有一個邏輯,例如,如果符合某些條件,則將用戶重定向到其他路線。如何在AngularJS的route.resolve中處理「複雜」邏輯

我試圖將這些邏輯從控制器移動到route.resolve以防止顯示「無效」視圖,然後將用戶重定向到其他地方。

我已經在route.resolve中處理驗證,但這只是一行 - authService.requireUser()。在更復雜的邏輯例如我需要擁有當前的用戶對象,根據路徑參數獲取一些資源,對結果進行一些計算,如果滿足某些條件,將用戶重定向到一個地方,否則重定向到另一個地方等等。基本上,它是很多代碼並將它所有進入路由定義似乎都不是很乾淨。

有沒有人有解決方案如何處理它?也許使用單獨的「路由解析器」對象?或者,最好將它放在控制器中,並在頁面加載時使用標誌(isLoaded)顯示微調,並且只有在所有內容加載完成後才顯示正確的視圖。

回答

0

您可以注入一個具有該邏輯的服務。而這種服務可能會返回一個承諾

resolve:{ 
     projects:['Projects', function (Projects) { 
     //TODO: need to know the current user here 
     return Projects.all(); 
     }], 
     tasks:['Tasks', function (Tasks) { 
     //TODO: need to know the current user here 
     return Tasks.all(); 
     }] 
    } 

你可以看看這個repo一個演示應用程序,讓您的一些想法。

+0

謝謝,這就是我現在已經或多或少的。 問題是我需要做一些事情 - 驗證用戶(一個服務),查找所有任務(第二個服務),根據用戶**和**任務對象檢查一些條件 - 如果滿足條件1重定向到一個URL,如果滿足條件2,則重定向到另一個,否則只是通過並返回任務。所以這個處理所有這些邏輯的新服務就是爲了這個特定的路線。我只是想知道如何處理它 - 如果我應該創建一個路徑解析器服務,保持所有路線等邏輯 – szimek

+1

我認爲創建一個路由解析器服務將更容易測試也 – dimirc