2013-07-30 47 views
1

我想了解一些基本的東西。我有一個帶有Rails後端的AngularJS前端。每當我在事物的Angular端定義一個路由時,即使路由是在Angular上定義的,它仍然會碰到Rails後端。這是pushState的正確行爲嗎?或者這意味着我沒有在客戶端上正確配置pushState?除非Angular不匹配的路線被擊中,否則請求不應該發送到服務器?瞭解HTML5 pushState的和服務器端的交互

這是我目前使用的爲「啓用」 pushState的與AngularJS:如果

App.config(['$locationProvider', function($locationProvider) { 
    $locationProvider.html5Mode(true); 
}]); 

不知道這是不是正確的,或者如果我pushState的理解是不正確的。

回答

0

你總是會撞到服務器上的第一個請求任何URL。 HTML5 pushState是用於更新顯示的URL和瀏覽器歷史記錄的API。

因此,如果您的應用角度正確處理路線,你可以配置你的Rails控制器具有必要的JSON數據來引導你的應用程序和處理在客戶端的UI渲染。

下面是一個簡單的滑軌/骨幹網應用的routes.rb中的一個片段:

resources :pages, except: :show 
get ':id/:model', to: 'pages#show', as: :page 
get ':id', to: 'pages#show', as: :page 
get '', to: 'pages#show' 

的深層鏈接,然後由客戶方pushState的路由器處理。

+0

值得一提的是,這些航線特定於我工作的應用程序,但基本上允許服務器來渲染引導應用程序,併爲上述模式匹配的路由網頁#show動作和我的控制器/視圖我客戶端框架(在我的情況下,骨幹,在你的:角)實例化應用程序,並根據url處理渲染邏輯。 – BenjaminCorey

0

您應該配置您的後端服務器index頁面上的任何要求/*(當然,你可以命名空間這些路由執行作爲API端點等)

所以,當你在瀏覽器中點擊/some-page,你的服務器將服務index頁面,您的ember路由器將顯示正確的視圖。

如果您希望服務器也處理和呈現不同的路由,那麼您應該配置ajax請求以使用在服務器上正確處理的一些特殊的header

簡單地說,如果您在服務器上看到具有該特殊標題的請求,那麼您在後端上呈現您的頁面...對於其他所有內容,您服務器index頁面。

我不熟悉的餘燼和軌道,但我已經做了骨幹和節點同樣的事情。