2017-01-27 133 views
0

好吧...所以我已經安裝了UI路由器和Rails模板來處理我的項目中的AngujarJs。到目前爲止,換算沒有問題。除非手動輸入到Chrome的欄中(例如localhost:3000/sign_in),否則我會得到'沒有與/ sign_in匹配的路由'(Ruby錯誤)。紅寶石軌道和UI路由器不能正常工作

但是,如果在我的應用程序中,我有一個按鈕用於更改我的狀態($ state.go)到該sign_in視圖,工作得很好。

發生了什麼事?

回答

0

發生什麼事情是因爲你的角度應用攔截了爲了自己的目的而改變位置欄,並且阻止瀏覽器向新的url發出http請求,所以在應用程序初始化後一切都很好。

當您重新加載頁面時,js應用程序並未首先加載,因此瀏覽器會將新頁面加載的位置發送到服務器。但是因爲服務器不知道角度應用的路由,它會嘗試用它自己的處理程序進行響應,在這種情況下它不存在。

現在解決這個問題的最簡單方法可能是將ui-router配置更改爲在URL中包含#。

angular.module('app', ['ui.router']) 
    ...snip 
    $locationProvider.html5Mode(false); 
}); 

這應該開始在路徑的角部分之前包括一個#。新路徑將是「/#/ sign_in」。瀏覽器會知道在#之前發送「/」給服務器,這將使用int init中的角度init來呈現頁面,然後angular可以處理#之後的「/ sign_in」部分。