我是AngularJs的新手。我有一个单页应用程序,其路由配置有控制器和视图。视图将加载到<ng-view></ng-view>
页面的index.html
元素中。在控制器内部,我正在进行http
调用以获取数据并将数据绑定到$scope
。对于成功方案,这可以正常工作但如果有错误,我如何插入另一个视图而不是在角度路径内配置的默认视图。请告诉我。
答案 0 :(得分:32)
要实现处理ajax错误的常见方案,您可以根据错误状态实现自定义请求拦截器并将用户重定向到错误页面(或登录页面):
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');
}
]);
答案 1 :(得分:18)
发生错误时,使用$location.url()
重定向到404.html
$http.get(url,[params])
.success(function(data, status, headers, config){
// bind your data to scope
})
.error(function(data, status, headers, config) {
$location.url('/404');
});
然后配置您的$routeProvider
$routeProvider
.when('/404', {
templateUrl: '404.html',
controller: 'Four04Controller'
})
答案 2 :(得分:3)
你可以使用:https://github.com/angular-ui/ui-router 如果出现错误,您可以触发错误&#34;州。 几个星期前我遇到了同样的问题,我已经以这种方式解决了这个问题
答案 3 :(得分:0)
如果你使用 $ stateProvider 而不是 $ routeProvider ,你可以这样做:
let sizeToFit = CGSize(width: contentLabel.frame.size.width,
height: CGFloat.greatestFiniteMagnitude)
let textSize = contentLabel.sizeThatFits(sizeToFit)
注意 $ urlRouterProvider.otherwise(url),这是在提供程序找不到请求的url时调用的函数,因此它会自动重定向到此函数中提供的url