只是要明确一点:这不会在主页请求上发送 hashbang。根据HTTP 规范,没有办法做到这一点。
您可以在随后的 AJAX 请求中发送它,但这并不能真正帮助您解决这个问题。除了不支持不支持html5mode的浏览器外,没有其他解决办法。
浏览器不会自动将 hashbang 发送到服务器,所以是的,您需要手动发送。使用标题是一个不错的选择。
看看docs。$httpProvider.interceptors
_
您可以注册一个请求拦截器$http
(AngularJS 在内部使用它来处理任何 AJAX 请求,您也应该如此)附加一个自定义标头。然后,您可以使用以下方法将该标头值设置为实际的 hashbang $location.path()
:
var app = angular.module('MyApp',[]);
app.factory('httpInterceptor', function($q, $location) {
return {
'request': function(config) {
if(config.url.indexOf('product')) {
config.headers.Hashbang = $location.path();
}
return config;
}
};
});
app.config(function($httpProvider) {
$httpProvider.interceptors.push('httpInterceptor');
});
app.controller('Ctrl', function($scope, $http) {
$http({method: 'GET', url: '/echo/json/'}).
success(function(data, status, headers, config) {
console.log(data);
});
});
这是小提琴。你可以像这样测试它。查看开发人员工具中发送的标头。
请注意,我没有使用真正的 hashbang ( #!
) 进行测试,而只是使用哈希,因为小提琴不允许这样做。