是否可以在特定控制器中重定向而不更改URL?我想,如果进入控制器我有GET请求的错误,它必须显示404页面。例如,我有以下文件。
index.html
:
<!DOCTYPE html>
<html ng-app="app" ng-controller="MainCtrl">
<head>
...
</head>
<body>
...
<ng-view></ng-view>
...
</body>
</html>
app.js
:
angular
.module('app', [...])
...
.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/home.html',
controller: 'HomeCtrl'
})
.when('/page1', {
templateUrl: 'views/page1.html',
controller: 'Page1Ctrl'
})
.when('/page2', {
templateUrl: 'views/page1.html',
controller: 'Page2Ctrl'
})
.when('/page3', {
templateUrl: 'views/page3.html',
controller: 'Page1Ctrl'
})
...
.otherwise({
templateUrl: 'views/404.html',
controller: '404Ctrl'
});
});
例如,重定向必须在page1.js
angular.module('app')
.controller('Page1Ctrl', function($scope, $http) {
$http.get(...).then(function() {
// all ok.
}, function() {
// error, redirect to 404 page.
});
});
我怎么能这样做?
答案 0 :(得分:2)
404 page
的路线应为:
.when('/404Page', {
templateUrl: 'views/404.html',
controller: '404Ctrl'
});
你可以在interceptor
中处理它,如下所示:
$provide.factory('MyHttpInterceptor', function ($q, $window ) {
return {
// On response failture
responseError: function (rejection) {
if(rejection.status==400)
$state.go('404Page');
return $q.reject(rejection);
}
}
});
//push interceptor into interceptors array
$httpProvider.interceptors.push('MyHttpInterceptor');
我希望这会对你有所帮助。