AngularJS: как включить $ locationProvider.html5Mode с глубокими ссылками
При включении html5Mode в AngularJS через$locationProvider.html5Mode(true)
навигация кажется перекошенной, когда вы попадаете на страницу, расположенную глубже на сайте.
например:
http://www.site.com
когда я перехожу к корню, я могу нажать на все ссылки на сайте, Angular's$routeProvider
возьмет на себя навигацию по сайту и загрузку правильных просмотров.
http://www.site.com/news/archive
но когда я перехожу к этому URL (или нажимаю кнопку Обновить, когда ям на Deeplink, как вышеупомянутый ...) эта навигация не работает, как я ожидаю. во-первых, наш какДокументация для $ locationProvider.html5Mode указывает, мы ловим все URL-адреса на сервере, аналогичноotherwise
route in angular и возвращает тот же html, что и корневой домен. Но если я тогда проверю$location
объект изнутриrun
функция угловая, это говорит мне, чтоhttp://www.site.com
мойhost
и это/archive
мойpath
,$routeProvider
прибывает в.otherwise()
пункт, так как у меня есть только/news/archive
как действительный маршрут. и приложение делает странные вещи.
Может быть, переписать на сервере нужно по-другому, или мне нужно указать вещи в угловых, но в настоящее время ям, не понимая, почему угловые видятпуть без/news
сегмент включен.
пример 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's as URL
}]);
редактировать в соответствии с запросом, более подробная информация о стороне сервера: сторона сервера организована путем маршрутизации Zend Framework, и он обрабатывает это 's собственные маршруты (для передачи данных в интерфейс по конкретным/api
urls, и, в конце концов, существует универсальный маршрут, если никакой другой конкретный маршрут не связан, он обслуживает тот же html, что и корневой маршрут. так что он в основном обслуживает домашнюю страницу html по этому глубокому маршруту.
Обновление 2 Изучив проблему, мы заметили, что эта маршрутизация работает нормально на стабильной версии Angular 1.0.7, но демонстрирует описанное выше поведение в нестабильной версии Angular 1.1.5.I '
мы проверили журналы изменений, но не нашлиПока что не нашел ничего полезного, я думаю, мы можем либо представить это как ошибку, либо нежелательное поведение, связанное с определенным изменением, которое они сделали, или просто подождать и посмотреть, получится ли это.Исправлена ошибка, из-за которой позднее будет выпущена стабильная версия.