AngularJS: Рекомендация о рендеринге другого вида при HTTP 404

Что я делаю

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

    $scope.thisMonthBudgetSummary = function () { console.log("получение сводки бюджета");

        var date = new Date();
        BudgetSummary.get({'month': date.getMonth() + 1, 'year': date.getFullYear()},
            function () {
                // success
            },
            function (error) {
                //error
                console.log('error:', error.status);
            })
    };
    

проблема
- Я хочу сделать другое представление на одной странице, когда HTTP-ответ 404Какая рекомендация по этому поводу? я сбит с толку
- Я считаю, что не очень хорошая идея жестко кодировать имя шаблона в контроллере

2 ответа

Если вам нужна функциональность по умолчанию для вашего приложения, ответ @Mohammad Sepahvand сработает. Если вы просто хотите получить разовый запрос, вы можете сделать:

var date = new Date();
BudgetSummary.get({'month': date.getMonth() + 1, 'year': date.getFullYear()},
    function (data, status, headers, config)  {
        //check your status here-->
        if (status === '200'){
            $location.path('/path/to/other/route');
        }
    },
    function (data, status, headers, config){
        //check your status here-->
        if (status === '404'){
            $location.path('/path/to/other/route');
        }
    })
};

$http Перехватчик, безусловно, один из способов, в конфигурации вашего приложения вы можете сделать:

$httpProvider.interceptors.push(['$q', '$location', function ($q, $location) {
                return {
                    'request': function (config) {
                        return config || $q.when(config);
                    },
                    'requestError': function (rejection) {
                        return $q.reject(rejection);
                    },
                    'response': function (response) {
                        return response || $q.when(response);
                    },
                    'responseError': function (rejection) {
                        if (rejection.status == "404") {
                           $location.path("/yourErrorRoute")
                        }
                        return $q.reject(rejection);
                    }
                };
}])
Другие вопросы по тегам