我试图理解一些基本的东西。我有一个带有Rails后端的AngularJS前端。每当我在Angular端定义路径时,它仍然会击中Rails后端,即使路径是在Angular上定义的。这是pushState的正确行为吗?或者这是否意味着我没有在客户端上正确配置pushState?请求是否应该发送到服务器,除非与Angular不匹配的路由被击中?
这是我目前用于使用AngularJS'启用'pushState的方法:
App.config(['$locationProvider', function($locationProvider) {
$locationProvider.html5Mode(true);
}]);
不确定这是不正确还是我对pushState的理解不正确。
答案 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不熟悉,但我对骨干和节点做了同样的事情。