2015-07-03 3 views
1

Я использую примеры в https://docs.angularjs.org/tutorial/step_07 и https://docs.angularjs.org/tutorial/step_08 для демонстрации здесь. Мы маршрутизация ниже:Angularjs ngRoute перенаправить на страницу «не найден» на основе данных ajax

phonecatApp.config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider. 
     when('/phones', { 
     templateUrl: 'partials/phone-list.html', 
     controller: 'PhoneListCtrl' 
     }). 
     when('/phones/:phoneId', { 
     templateUrl: 'partials/phone-detail.html', 
     controller: 'PhoneDetailCtrl' 
     }). 
     otherwise({ 
     redirectTo: '/phones' 
     }); 
    }]); 

Когда мы идем по ссылке /phones/abcdefg, ни один файл не соответствует JSON запросу и появляется пустой шаблон. В этом случае мы должны быть перенаправлены на страницу «404 not found». В реальном случае, например, json, как показано ниже, вернется, когда мы перейдем к ссылке «/ phones /: phoneId» без сопоставленного номера телефона.

{phoneIdMatch: false} 

Что является традиционным способом или лучший способ в нг-маршрут для перенаправления на страницу на основе Ajax данных?

ответ

1

Хороший бэкэнд RESTful ответил бы с ответом 404, если он попросил телефон, которого не существует.

Чтобы справиться с этим ответом, вы бы просто добавить функцию обратного вызова ошибки в вашей $ HTTP обещание:

$http.get('phones/' + $routeParams.phoneId + '.json').then(function(response) { 
    $scope.phone = response.data; 
}).catch(function(response) { 
    // do what you want here 
}); 

Если то, что вы хотите перейти на определенный маршрут, как «/ 404», вы бы использовать $ службы местоположение:

.catch(function(response) { 
    if (response.status === 404) { 
     $location.url('/404'); 
    } 
}); 
+0

.success() и .error() устарели, используйте .then() и .catch() вместо – Sergii

+0

@Sergii это было сделано. –