尝试从angularjs范围打开GET页面

时间:2018-05-09 14:31:27

标签: javascript angularjs spring-boot

我试图调用一个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

调用时视图不会打开/加载

2 个答案:

答案 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')