了解HTML5 pushState和服务器端交互

时间:2013-07-30 18:41:58

标签: javascript html5 angularjs pushstate

我试图理解一些基本的东西。我有一个带有Rails后端的AngularJS前端。每当我在Angular端定义路径时,它仍然会击中Rails后端,即使路径是在Angular上定义的。这是pushState的正确行为吗?或者这是否意味着我没有在客户端上正确配置pushState?请求是否应该发送到服务器,除非与Angular不匹配的路由被击中?

这是我目前用于使用AngularJS'启用'pushState的方法:

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

不确定这是不正确还是我对pushState的理解不正确。

2 个答案:

答案 0 :(得分:0)

您拥有的任何网址将始终在第一次请求时点击服务器。 HTML5 pushState是用于更新显示的URL和浏览器历史记录的API。

因此,如果您的Angular应用程序正确处理路由,您可以配置Rails控制器以使用必需的JSON数据引导您的应用程序并处理客户端UI的呈现。

这是一个简单的rails / backbone应用程序的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路由器处理。

答案 1 :(得分:0)

您应该在任何请求index上配置后端到服务器/*页面(当然您可以命名这些路由处理程序以充当api端点等。)

因此,当您在浏览器上点击/some-page时,您的服务器将提供index路由器将呈现正确视图的ember页面。

如果您希望服务器也处理和呈现不同的路由,那么您应该配置ajax请求以使用在服务器上正确处理的一些特殊header

简单地说,如果您在服务器上看到带有该特殊标题的请求,那么您将在后端呈现您的页面......对于其他所有内容,您需要服务器index页。

我对ember和rails不熟悉,但我对骨干和节点做了同样的事情。