Je suis nouveau chez AngularJs. J'ai une application à page unique avec des itinéraires configurés avec un contrôleur et une vue. La vue est chargée dans l'élément <ng-view></ng-view>
de la page index.html
. À l'intérieur du contrôleur, je passe un appel http
pour obtenir les données et les lie au $scope
. Pour les scénarios de réussite, cela fonctionne bien, mais s'il y a une erreur, comment puis-je connecter une autre vue au lieu de la vue par défaut configurée dans la route angulaire. S'il vous plaît, faites-moi savoir.
Utilisez $location.url()
pour rediriger vers un fichier 404.html en cas d'erreur
$http.get(url,[params])
.success(function(data, status, headers, config){
// bind your data to scope
})
.error(function(data, status, headers, config) {
$location.url('/404');
});
Puis configurez votre $routeProvider
$routeProvider
.when('/404', {
templateUrl: '404.html',
controller: 'Four04Controller'
})
Pour implémenter un scénario courant de traitement des erreurs ajax, vous pouvez implémenter un intercepteur de requête personnalisé et rediriger l'utilisateur vers la page d'erreur (ou la page de connexion) en fonction du statut de l'erreur:
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');
}
]);
vous pouvez utiliser: https://github.com/angular-ui/ui-router En cas d'erreur, vous pouvez déclencher un état "erreur" il y a et j'ai résolu de cette façon
Si vous utilisez $ stateProvider au lieu de $ routeProvider vous pouvez faire comme ceci:
function routerConfig($stateProvider, $urlRouterProvider) {
$stateProvider
.state('404', {
url: '/404',
templateUrl: '404.html'
})
.state('home', {
url: '/',
templateUrl: 'home.html'
});
$urlRouterProvider.otherwise('/404');
}
Faites attention à $ urlRouterProvider.otherwise (url) , qui est la fonction appelée lorsque le fournisseur ne trouve pas l’URL demandée. Il est donc automatiquement redirigé vers l’URL fournie dans cette fonction.