确实,正如 Michal 的评论所建议的,您使用的似乎不是ng-model。
Angular 的 jqLite 不支持 serialize(),因为使用 Angular 通常会构建一个 ViewModel,然后将其绑定到表单。
但是,如果您运气不好,您可以添加 jQuery.js 以获得 serialize() 支持并创建一个简单的指令 - serializer - 它将作用于表单。
app.directive("serializer", function(){
return {
restrict: "A",
scope: {
onSubmit: "&serializer"
},
link: function(scope, element){
// assuming for brevity that directive is defined on <form>
var form = element;
form.submit(function(event){
event.preventDefault();
var serializedData = form.serialize();
scope.onSubmit({data: serializedData});
});
}
};
});
并按如下方式使用:
<form serializer="submit(data)">
<input name="foo">
<input name="bar">
<button type="submit">save</button>
</form>
在控制器中:
$scope.submit = function(data){
console.log(data);
}
plunker
编辑:
如果您使用ng-model 并且实际上有一个正确的 ViewModel,那么这是“Angular 方式”,因此,您应该有一些对象绑定到表单输入 - 您应该提交它。
<form name="foo" ng-submit="onSubmit()">
<input ng-model="fooObject.a">
<input ng-model="fooObject.b">
...
</form>
$scope.fooObject = {};
$scope.onSubmit = function(){
$http.post("url/to/server", {data: $scope.fooObject})
.success(...);
}