我目前有一個基於meanjs stack boilerplate的設置,我可以讓用戶登錄處於「登錄」狀態的用戶登錄,因爲我瀏覽網站。這是因爲將用戶對象保存在全局可用的服務中。AngularJS - 處理手動輸入URL的狀態的最佳方式
但是,這隻適用於我從我的根目錄,即從'/'和只在我的應用程序內導航。
如果我手動輸入一個URL,比如'/ page1',它會丟失全局用戶對象,但是如果我進入根網頁並通過網站導航到'/ page1'。那很好,它可以看到Service對象中的全局用戶對象。
所以我想這是由於整個頁面刷新失去全球價值的地方,通過網站導航不刷新所以你保留所有的變量。
要注意的一些事情包括:
- 我已經啓用HTML5Mode,使用前綴 '!'。
- 我用UI-路由器
- 我用一個標籤以「/」
- 我有明確的重新寫入規則在加載我的所有路線後,我有通吃「/ *」的最後一個路線並返回根index.html文件,因爲這是angularjs的東西。
我只是想知道人們通常在這裏做什麼?他們是否恢復了標準Cookie和本地存儲解決方案?我對角度相當陌生,所以我猜測這裏有一些庫。
我只是想知道推薦的方法來處理這個問題或大多數人做什麼,只是讓我以正確的方式和角度的方式對齊我想。
更新:
如果我手動導航到通過地址欄我的網站上另一個網址,我失去了我的用戶的狀態,但是如果我手動回到我的根通過地址欄,我的用戶狀態再次被看到,所以它不僅僅是關於在窗口刷新時丟失狀態。所以它似乎與在根URL上運行的代碼有關。
我有一個明確的重寫,手動輸入的URL(由於HTML5位置模式)應首先返回index.html,因爲它包含AngularJs文件,然後UI路由接管並正確路由它。
所以我會預料到根目錄上的任何代碼都會執行,所以它應該類似於通過網站導航或在地址欄中輸入。我必須錯過一些關於Angular的東西,它有這種效果。
更新2
權利,使更多的研究使我這個:
<script type="text/javascript">
var user = {{ user | json | safe }};
</script>
這是index.html的服務器端代碼,我想刷新頁面的時候它沒有運行通過手動URL創建一個新頁面。
使用散列爆炸模式,它工作,這是因爲使用散列爆炸模式,即使我在瀏覽器中鍵入一個URL,它不會導致刷新,因爲使用HTML5模式,它會刷新。所以現在我能想到的解決方案是使用sessionStorage。
除非有更好的選擇?
更新3:
它似乎處理的最佳方式是使用HTML5Mode時,你只是必須有明確的服務器和其他一些事情上重新寫。
Codewise,該用戶狀態如何設置?它是綁在根上的嗎? – 2014-10-10 23:22:45
它被設置在一個存儲它的服務上。它在根上可用。我仍然試圖找出一些說實話的東西,看看我的更新。 – 2014-10-11 12:37:41