在AngularJS控制器中,我执行$ http.post()请求并使用新数据更新$ scope,这可以正常工作。
但是如果出现错误,我想将同一个控制器的模板更改为另一个。我还没弄明白如何更改控制器的模板。
这是控制器内的一些伪代码:
// this is the controller
var self = this
$http
.post('/something', $scope.something)
.success(function(data) {
$scope.result = data
})
.error(function(err) {
$scope.error = err
var statusCode = err.statusCode
// for example on a 403, I want the template 'errors/403.html' to
// be rendered
self.template = $templateCache.get('errors/' + statusCode + '.html')
})
任何想法如何可能?
感谢您的任何建议。我在这里有点绝望......
答案 0 :(得分:1)
尝试
$location.path('/login');
答案 1 :(得分:0)
首先,您应该设置路由提供程序,然后使用$ location service来更改URL。
配置路由提供程序:
var app = angular.module("myApp", ["ngRoute"]);
app.config(function ($routeProvider) {
$routeProvider.when("/error", { controller: "", templateUrl: "/app/error.html" });
// setup some more routes here as above
$routeProvider.otherwise({ redirectTo: "/login" });
在JS文件中 -
var self = this
$http
.post('/something', $scope.something)
.success(function(data) {
$scope.result = data
})
.error(function(err) {
$scope.error = err
var statusCode = err.statusCode
// for example on a 403, I want the template 'errors/403.html' to
// be rendered
$location.path("/error");
})
不要忘记添加angular-route.js文件。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body data-ng-app="myApp">
<div data-ng-view=""></div>
<script src="Scripts/angular-route.js"></script>
</body>
</html>
答案 2 :(得分:0)
angular.module(&#39; myApp&#39;,[&#39; myApp.filters&#39;,&#39; myApp.services&#39;,&#39; myApp.directives&#39;] ,function($ routeProvider,$ locationProvider,$ httpProvider){
var interceptor = ['$rootScope', '$q', function (scope, $q) {
function success(response) {
return response;
}
function error(response) {
var status = response.status;
if (status == 401) {
window.location = "./index.html";
return;
}
// otherwise
return $q.reject(response);
}
return function (promise) {
return promise.then(success, error);
}
}];
$httpProvider.responseInterceptors.push(interceptor);