在AngularJs单页应用程序中发布请求


问题内容

我正在Spring MVC和AngularJS中构建一个单页应用程序。我有一个header-footer-sidebar和ng-
view部分,其中所有页面都由Ajax使用routeProvider加载。事实是routeProvider 仅适用于GET请求
,这意味着我无法传递任何参数。( 我不想在url中传递所有表单数据 )我想使用 Ajax POST请求 提交表单,同时更改ng-
view内容。使用Angular routeProvider可以做到吗?

到目前为止,我已经想到的解决方案是发布表单数据,接收成功消息,然后更改url的哈希值,以便向服务器请求新页面的新请求。但是,此解决方案的缺点是,我只想执行一个请求,却对服务器执行了两个请求。

谢谢


问题答案:

首先,您必须意识到routeProviders可以在您的应用程序内部更改路由,而不是将数据传递给服务器。使用服务或工厂将数据传递到服务器,然后从那里返回响应页面。这是一个简单的例子

形成:-

<form name="empForm" ng-controller="insertEmpCtrl" ng-submit="insertEmp()">
name: <input type="text" class="form-control" name="lname" ng-model="formData.lname"/>
<input type="submit" value="Save" />

路由:-

myApp.config(function($routeProvider){
$routeProvider
    .when('/',{
        templateUrl : '/your/project/root.html',
        controller : 'controler1'
    })
    .when('/page',{
        templateUrl : '/your/project/page.html',
        controller : 'controler2'
    });
});

厂:-

myApp.factory('factoryname', function(){
return{
    insertData: function($scope,$http){
        var json_data = JSON.stringify($scope.formData);


        $http.post(url, json_data, {
            withCredentials: true,
            headers: {'Content-Type': 'application/json'},
            transformRequest: angular.identity
        }).success(function(){
            console.log("done");
        }).error(function(){
            console.log("error");
        });
    }
}
});

控制器:-

myApp.controller('controller1',['$scope','$http','$rootScope','factoryname',function($scope,$http,$rootScope,factoryname){

$scope.insertEmp = function(){

    $scope.formFactory = factoryname.insertData($scope,$http);

};
}]);

弹簧控制器:

@RequestMapping(value="/aurlPattern",method = RequestMethod.POST)
public String insertmethod(@RequestBody  FormModelObject FormModelObject) {

    //do something


    return "responsePage";
}