Перенаправление на страницу ошибок в Angularjs

Я новичок в AngularJs. У меня есть одностраничное приложение с настройками маршрутов с контроллером и представлением. Вид загружается внутри элемента <ng-view></ng-view> страницы index.html. Внутри контроллера я делаю вызов http для получения данных и привязки данных к $scope. Для сценариев успеха это отлично работает, но если есть ошибка, как подключить другое представление вместо представления по умолчанию, настроенного внутри маршрута angular. PLease дайте мне знать.

Ответ 1

Используйте $location.url() для перенаправления на 404.html при возникновении ошибки

$http.get(url,[params])
    .success(function(data, status, headers, config){
        // bind your data to scope
    })
    .error(function(data, status, headers, config) {
        $location.url('/404');
    });

Затем настройте свой $routeProvider

$routeProvider
    .when('/404', {
        templateUrl: '404.html',
        controller: 'Four04Controller'
    })

Ответ 2

Чтобы реализовать общий сценарий для обработки ошибок ajax, вы можете реализовать пользовательский запрос-перехватчик и перенаправить пользователя на страницу с ошибкой (или страницу входа) в соответствии с состоянием ошибки:

myApp.factory('httpErrorResponseInterceptor', ['$q', '$location',
  function($q, $location) {
    return {
      response: function(responseData) {
        return responseData;
      },
      responseError: function error(response) {
        switch (response.status) {
          case 401:
            $location.path('/login');
            break;
          case 404:
            $location.path('/404');
            break;
          default:
            $location.path('/error');
        }

        return $q.reject(response);
      }
    };
  }
]);

//Http Intercpetor to check auth failures for xhr requests
myApp.config(['$httpProvider',
  function($httpProvider) {
    $httpProvider.interceptors.push('httpErrorResponseInterceptor');
  }
]);

Plunker здесь

Ответ 3

вы можете использовать: https://github.com/angular-ui/ui-router В случае ошибки вы можете вызвать состояние "ошибка". У меня была та же проблема несколько недель назад, и я решил таким образом

Ответ 4

Если вы используете $stateProvider вместо $routeProvider, вы можете сделать это следующим образом:

function routerConfig($stateProvider, $urlRouterProvider) {
  $stateProvider
     .state('404', {
       url: '/404',
       templateUrl: '404.html'
     })
     .state('home', {
       url: '/',
       templateUrl: 'home.html'
     });

  $urlRouterProvider.otherwise('/404');
}

Обратите внимание на $urlRouterProvider.otherwise(url), который является функцией, которая вызывается, когда провайдер не находит запрошенный URL-адрес, поэтому он автоматически перенаправляет URL-адрес, указанный в этой функции.