Как поймать недопустимый URL-адрес?

Я создаю простой HTML-сайт, используя угловой JS ui-маршрутизатор.

Я создал пользовательскую страницу 404 ('www.mysite / # / error / 404'), на который перенаправляется пользователь, если пользователь вводит url-адрес типа " www.mysite / # / invalidUrl'. Эта функциональность была достигнута следующим фрагментом кода:

$urlRouterProvider
            .when('', '/')
            .when('/home', '/')
            .otherwise('/error/404');

и следующий фрагмент:

$stateProvider.state('404', {
            parent: 'app',
            url: '^/error/404',
            views: {
                'errorContent@main': {
                    controller: 'error404Controller',
                    templateUrl: 'js/general/templates/error404.html'
                }
            }
        });

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

Запрошенный URL-адрес не найден
Запрос: www.mysite.com/#/invalidUrl

Я попытался прослушать событие "$stateNotFound", которое, похоже, срабатывает только при запросе определенного недопустимого состояния. Я также попытался прослушать события "$stateChangeStart", "$locationChangeStart " и "$locationChangeSuccess", но не смог найти способ достичь этой функциональности.

это возможно? Пожалуйста, поделитесь своими мыслями - спасибо

1 ответов


потрясающе! Спасибо Келер Радим. Не знаю, как я на него не приземлился!--6-->нить когда я искал, но это помогло мне получить ответ.

Я изменил ответ в этом потоке, чтобы соответствовать моему сценарию, который я оставлю ниже ссылки на любые другие пользователи.

$stateProvider.state('404', {
            parent: 'app',
            url: '^/error/404',
            views: {
                'errorContent@main': {
                    controller: 'error404Controller',
                    templateUrl: 'js/general/templates/error404.html'
                }
            }
        });

        $urlRouterProvider
            .when('', '/')
            .when('/home', '/')
            .otherwise(function ($injector, $location) {
                var state = $injector.get('$state');
                state.go('404', { url: $location.path() }, { location: true });
        });

таким образом, волшебное изменение было функцией, определенной для опции "в противном случае". Я не изменил URL-адрес состояния "ошибка". Вместо этого я использовал "государство".перейти к активации государство '404' и прошел путь в качестве параметра состояния.

задание location=true приведет вас к URL-адресу состояния, и location=false не будет. В любом случае, вы предпочитаете недопустимый URL-адрес теперь можно легко получить доступ.