2014-02-16 129 views
13

當用戶訪問未授權的私人網頁時,比如說個人資料,我的後端302將重定向到一個控制器操作,該操作提供登錄部分來代替概要文件部分。由於它302重定向到返回部分內容的操作,所以url地址欄不會從用戶嘗試訪問的頁面(「/ profile」)更改。角度重新加載當前路徑並重新加載當前模板

我打算「修復」,但實際上我認爲它不但可以處理返回的url,還可以提供良好的用戶體驗,而不會產生查詢參數。

這個想法是一旦他們登錄我只是想重新加載當前路線,即通過「/ profile」對部分配置文件做一個GET請求,然後切換回來,而不是登錄部分。

但是,我不能得到這個「重載當前路線」的工作。我嘗試了以下所有內容:

$location.$$compose(); 
$location.absUrl($location.path()); 
$location.url($location.path()); 
$location.path($location.path()) 
$route.reload(); 

但是沒有工作。 $ route.reload()似乎是確定的方式,但它也不起作用。它通過路線循環,重新實現控制器,但不會執行GET請求來重新加載模板

唯一可行的是通過location.reload()進行硬刷新,但這並不理想。

如何強制角度重新加載當前路線的模板?

+0

你試過$ location.path('mypath')嗎? – Whisher

+0

我不明白你的意思,$ location.path是一個函數。我無法設置它,從引用路徑(路徑)拋出錯誤 – parliament

+0

這種方法是getter/setter我沒有任何問題,像$ location.path('/ post/index');我可以考慮的唯一事情,如果它在相同的路線上工作。 – Whisher

回答

24

好,我發現lgalfaso在Github上提供的解決方案(準確粘貼):

模板是 緩存,如果用戶不具有的權限是在一個頁面,然後 這種檢查應該是在它到達控制器之前或之後,在控制器內但不在模板檢索

如果這是您想要遵循的方式,那麼在調用reload之前,您需要從$ templateCache中刪除 模板

所以這對我很有效,因爲登錄模板實際上被緩存爲用戶嘗試訪問的模板。因此,刪除它並讓角度重新獲取當前路線的正確路線就像魅力一樣。

var currentPageTemplate = $route.current.templateUrl; 
$templateCache.remove(currentPageTemplate); 
$route.reload(); 
1

我注意到,$route.reload()方法重新實例一切,這是設置你$routeProvider.when("/someUrl",{controller:'SomeController',templateUrl:'SomeView.html'})模板,控制器和/或你可能有.when()方法內通過的任何解決的承諾上。

因此;當您構建應用程序時,如果您希望$route.reload()重新加載所有頁面並重新實例化控制器,則必須將所有內容放在<div ng-view></div>容器下,並且在templateUrl文件內包含任何菜單或頁腳

相關問題