Я написал часть веб-приложения в Angular. Чтобы гарантировать, что все маршруты охвачены, я хотел добавить свойство redirectTo
в $routeProvider
, так что неверные маршруты будут возвращены в корень веб-приложения, которое не использует Angular.
Я пробовал:
$routeProvider.otherwise({
redirectTo: '/'
});
но, очевидно, это только маршруты в Angular контролируемой части URL-адреса, поэтому пользователи будут перенаправлены на URL-адрес, например http://app.com/angular-part-of-web-app#
, вместо http://app.com
, где я бы хотел, чтобы они ушли.
Я работал над этим, имея пустую часть, чтобы действовать как страница "404", а затем контроллер, который просто использует объект $window
для перенаправления на нужную страницу:
routes.js
// Redirect to site list.
$routeProvider.when('/404', {
templateUrl: '/partials/404.html',
controller: 'RedirectCtrl'
});
// Redirect to the 404 page.
$routeProvider.otherwise({
redirectTo: '/404'
});
controllers.js
// Controller to redirect users to root page of site.
.controller('RedirectCtrl', ['$scope', '$window', function ($scope, $window) {
$window.location.href = '/';
}]);
Однако это означает, что "слишком шумные, должно быть лучше" сигнальные колокола. Есть ли лучший способ сделать это в Angular?
EDIT: Angular маршруты - перенаправление на внешний сайт? не дали ответа на тот же вопрос. Я собираюсь оставить свой вопрос открытым, вместо того, чтобы пометить его как дубликат (пока), так как мир Angular перемещается так быстро, предыдущий ответ больше не может быть.