我试图调用一个get方法在angularjs范围内打开一个页面。 get方法在spring控制器中定义。 get方法称为successfuly,但页面永远不会加载。以下是摘录
.then(function successCallback(response) {
if (response.status == 204) {
} else if (response.status == 200) {
$scope.nredit = {
};
$scope.goToView.goToView(); //call the get method here
}
这是调用GET方法的范围,但页面永远不会打开
$scope.goToView = {
goToView: function () {
$http({
method: 'GET',
url: '/mypage',
}).then(function successCallback(response) {
if (response.status == 400) {
alert('Not allowed to view this page!');
} else if (response.status == 200) {
// $scope.users = response.data;
}
}, function errorCallback(response) {
alert(JSON.stringify(response));
});
}
}
这是spring中定义的get方法控制器
@RequestMapping(value = "/mypage", method = RequestMethod.GET)
public ModelAndView goToView(ModelAndView model, HttpServletRequest request, HttpSession userSession) throws IOException {
model.setViewName("view");
return model;
}
为什么从angular
调用时视图不会打开/加载答案 0 :(得分:0)
来自AngularJS文档:
$ http服务是一个核心AngularJS服务,它通过浏览器的XMLHttpRequest对象或通过JSONP促进与远程HTTP服务器的通信。
简而言之:使用$ http,您正在执行AJAX请求。因此,这将返回response.data
中目标页面(/ mypage)的内容。这不会触发重定向。
您应该使用AngularJS路由。您可以在本教程中找到一个示例:https://www.w3schools.com/angular/angular_routing.asp
答案 1 :(得分:0)
你可以让goToView可用于范围......如果有一个带有函数的范围对象,那就太过分了。你应该将承诺链接起来以提高可读性。
将成功处理程序表单初始承诺替换为handleResponse
,您没有显示响应,所以它是告诉发生了什么。
let getPage = () => {
return $http({
method: 'GET',
url: '/mypage',
});
}
let goToPage = (response) => {
if (response.status == 400) {
alert('Not allowed to view this page!');
} else if (response.status == 200) {
$scope.users = response.data;
}
};
let handleResponse = (response) {
... dowhater
return $scope.goToView();
}
$scope.goToView = () => {
return getPage()
.then(goToPage)
}
我刚刚再次阅读了这个问题 - 您不应该以这种方式请求页面。我以为它在页面上做了一些事情。这不起作用。您应该使用路由,或者如果您使用的是ui-router,则可以使用状态树。
$state.go('mystate')