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');
    }
});