Angularjs ngRoute 根据 ajax 数据重定向到 "not found" 页面
Angularjs ngRoute redirect to "not found" page based on ajax data
我在这里使用 https://docs.angularjs.org/tutorial/step_07 and https://docs.angularjs.org/tutorial/step_08 中的示例进行演示。我们有以下路线:
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'
});
}]);
当我们转到 link /phones/abcdefg 时,没有 json 文件与查询匹配,并且出现一个空模板。在这种情况下,我们应该被重定向到“404 not found”页面。例如,在实际情况下,当我们转到 link“/phones/:phoneId”但没有匹配的 phoneId 时,如下所示的 json 会返回。
{phoneIdMatch: false}
根据 ajax 数据 ,在 ng-route 中重定向到页面 的传统方式或最佳方式是什么?
如果请求 phone 不存在,好的 RESTful 后端会以 404 响应响应。
要处理该响应,您只需向 $http promise 添加一个错误回调:
$http.get('phones/' + $routeParams.phoneId + '.json').then(function(response) {
$scope.phone = response.data;
}).catch(function(response) {
// do what you want here
});
如果您想要前往特定路线,例如“/404”,您可以使用 $location 服务:
.catch(function(response) {
if (response.status === 404) {
$location.url('/404');
}
});
我在这里使用 https://docs.angularjs.org/tutorial/step_07 and https://docs.angularjs.org/tutorial/step_08 中的示例进行演示。我们有以下路线:
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'
});
}]);
当我们转到 link /phones/abcdefg 时,没有 json 文件与查询匹配,并且出现一个空模板。在这种情况下,我们应该被重定向到“404 not found”页面。例如,在实际情况下,当我们转到 link“/phones/:phoneId”但没有匹配的 phoneId 时,如下所示的 json 会返回。
{phoneIdMatch: false}
根据 ajax 数据 ,在 ng-route 中重定向到页面 的传统方式或最佳方式是什么?
如果请求 phone 不存在,好的 RESTful 后端会以 404 响应响应。
要处理该响应,您只需向 $http promise 添加一个错误回调:
$http.get('phones/' + $routeParams.phoneId + '.json').then(function(response) {
$scope.phone = response.data;
}).catch(function(response) {
// do what you want here
});
如果您想要前往特定路线,例如“/404”,您可以使用 $location 服务:
.catch(function(response) {
if (response.status === 404) {
$location.url('/404');
}
});