Подтвердить что ты не робот

Как не изменять URL-адрес при отображении страницы ошибки 404 с помощью ui-router

Я хочу показать страницу ошибки 404, но также хочу сохранить неправильный URL-адрес в местоположении.

Если я сделаю что-то вроде этого:

$urlRouterProvider.otherwise('404');
$stateProvider
    .state('404', {
        url: '/404',
        template: error404Template
    });

url изменится на /404. Как я могу показать сообщение об ошибке на неправильных URL-адресах без изменения фактического URL-адреса?

4b9b3361

Ответ 1

Существует решение для этого сценария. Мы использовали бы 1) одну собственную функцию ui-router и 2) одну настройку конфигурации. рабочий пример можно было бы увидеть здесь.

1) Собственная функция определений состояний ui-router:

url не требуется. Состояние может быть определено без его представления в местоположении.

2) Настройка конфигурации:

путь Строка | Функция URL-адрес, к которому вы хотите перенаправить, или правило функции, которое возвращает URL-адрес. Версия функции передается двумя параметрами: $injector и $location

Решение: комбинация этих двух. Мы бы имели state без url и пользовательских otherwise:

$stateProvider
  .state('404', {
    // no url defined
    template: '<div>error</div>',
  })

$urlRouterProvider.otherwise(function($injector, $location){
   var state = $injector.get('$state');
   state.go('404');
   return $location.path();
});

Проверьте, что все в этом рабочем примере

Ответ 2

По состоянию на ui-router#0.2.15 вы можете использовать $state.go() и отправить вариант, чтобы не обновлять местоположение:

$urlRouterProvider.otherwise(function($injector) {

  var $state = $injector.get('$state');

  $state.go('404', null, {
    location: false
  });

});