1

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

这就是我目前使用 AngularJS 来“启用”pushState 的方法:

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

不确定这是否不正确,或者我对 pushState 的理解是否不正确。

4

2 回答 2

0

您应该index根据任何请求将后端配置为服务器页面/*(当然,您可以命名这些路由处理程序以用作 api 端点等)

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

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

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

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

于 2014-04-15T21:39:01.357 回答
0

您拥有的任何 url 将始终在第一个请求时访问服务器。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 路由器处理深度链接。

于 2013-07-30T19:02:03.187 回答