Я использую API отдыха WordPress, и у меня есть состояния в моем приложении AngularJS, как показано ниже:
.state('public.blog', {
abstract: true,
url: '/blog',
template: '<ui-view/>',
})
.state('public.blog.home', {
url: '/',
templateUrl: 'public/blog.html',
controller: 'PublicBlogCtrl',
controllerAs: 'vm',
})
.state('public.blog.post', {
url: '/:slug',
templateUrl: 'public/blog.post.html',
controller: 'PublicBlogPostCtrl',
controllerAs: 'vm',
})
И, например, у меня есть статья типа «http://example.com/blog/what-is-angularjs'. Он отлично работает, когда я нажимаю ссылку в своем приложении следующим образом:
<a ui-sref="public.blog.post({ slug: post.slug })">
Но проблема в том, что когда я пишу URL-адрес 'http://example.com/blog/what-is-angularjs' прямо в адресной строке браузера. Когда я это делаю, angular не может обработать URL-адрес и распознает его как неправильный URL-адрес, который не соответствует ни одному состоянию, а затем ищет $urlRouterProvider.otherwise('/404'); и показывает мою 404 - Not Found
страницу.
Так что не так?
Общий пакет обновлений №1
Когда я отправляю слаг поста в качестве параметра, возникает проблема, но когда я использую идентификатор поста для получения поста, он работает нормально. Поэтому я думаю, что что-то не так в слаге wp-api.
Общий пакет обновлений № 2
Контроллер выглядит так:
function PublicBlogPostCtrl($scope, $stateParams, WPService) {
var vm = this;
WPService.getPost($stateParams.slug).success(function(res) {
$scope.post = res[0];
}).error(function(err) {
console.error(err);
});
}
app.controller('PublicBlogPostCtrl', PublicBlogPostCtrl);
И WPService.getPost
, как показано ниже:
WPService.getPost = function(slug) {
return $http.get('wp-json/wp/v2/posts/?filter[name]=' + slug).success(function(res, status, headers) {
return res;
}).error(function(err) {
return err;
});
};