При включении html5Mode в AngularJS через $locationProvider.html5Mode(true)
навигация, похоже, искажается, когда вы приземляетесь на страницу глубже на сайте.
например:
-
http://www.site.com
когда я перехожу к корню, я могу щелкнуть все ссылки на сайте, Angular$routeProvider
возьмет на себя навигацию по сайту и загрузку правильных представлений. -
http://www.site.com/news/archive
но когда я перехожу к этому URL (или ударяю обновление, когда я нахожусь на deeplink, как и выше), эта навигация не работает, как я ожидаю. в первую очередь, как Documentation for $locationProvider.html5Mode, мы улавливаем все URL-адреса на сервере, аналогично маршрутуotherwise
в angular и вернуть тот же html, что и корневой домен. Но если я затем проверяю объект$location
из функцииrun
angular, он сообщает мне, чтоhttp://www.site.com
- мойhost
, а/archive
- мойpath
.$routeProvider
приходит в предложение.otherwise()
, так как у меня есть только/news/archive
как действительный маршрут. и приложение делает странные вещи.
Возможно, переписывание на сервере должно выполняться по-другому или мне нужно указать материал в angular, но в настоящее время я не знаю, почему Angular видеть путь без сегмента /news
.
example main.js:
// Create an application module
var App = angular.module('App', []);
App.config(['$routeProvider', '$locationProvider', function AppConfig($routeProvider, $locationProvider) {
$routeProvider
.when(
'/', {
redirectTo: '/home'
})
.when('/home', {
templateUrl: 'templates/home.html'
})
.when('/login', {
templateUrl: 'templates/login.html'
})
.when('/news', {
templateUrl: 'templates/news.html'
})
.when('/news/archive', {
templateUrl: 'templates/newsarchive.html'
})
// removed other routes ... *snip
.otherwise({
redirectTo: '/home'
}
);
// enable html5Mode for pushstate ('#'-less URLs)
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix('!');
}]);
// Initialize the application
App.run(['$location', function AppRun($location) {
debugger; // -->> here i debug the $location object to see what angular see as URL
}]);
Edit
по запросу, более подробная информация на стороне сервера:
серверная сторона организована путем маршрутизации структуры zend и обрабатывает ее собственные маршруты (для обслуживания данных в интерфейсе на определенных URL-адресах /api
), а в конце есть общий маршрут, если какой-либо другой маршрут не является связанный, он обслуживает тот же html, что и корневой маршрут.
поэтому он в основном обслуживает домашнюю страницу html на этом отключенном маршруте.
Обновление 2 после изучения проблемы мы заметили, что эта маршрутизация работает нормально, так как она находится на Angular 1.0.7 stable, но показывает вышеописанное поведение в Angular 1.1.5 нестабильной.
Я проверил журналы изменений, но пока не нашел ничего полезного, я думаю, мы можем либо представить его как ошибку, либо нежелательное поведение, связанное с определенным изменением, которое они сделали, либо просто подождать и посмотреть, получите исправление в более поздней версии, чтобы быть выпущенной стабильной версией.