2013-04-08 8 views
26

angularjsの関数をシリアライズする方法はありますか?angularjsを使ってフォームをより効率的にシリアル化する方法はありますか?

私の投稿はこのようになります。

$scope.signup_submit = function() { 
    var formData = { 
    username: $scope.username, 
    full_name: $scope.full_name, 
    email: $scope.email, 
    password: $scope.password, 
    confirm_password: $scope.confirm_password 
    } 

    $http({ 
    method: "POST", 
    url: '/signup', 
    data: formData, 
    }).success(function (data) { 
    if (data.status == 'success') { 
     alert('all okay'); 
    } else { 
     alert(data.msg) 
    } 
    }); 
} 
+1

あなたは試しましたか?$ element.serialize()? – StuR

+0

はい、それは未定義の関数を返しますserialize –

+2

私は彼が$(要素)を意味すると思う。あなたはそれを実現するためにJQueryを持つ必要があります。 – ganaraj

答えて

62

これは、AngularJSを使用してフォームデータにアクセスする方法ではありません。フォーム内のデータは、スコープ内でバインドする必要があります。

などです。 $ scope.formDataには、すべてのデータ構造が含まれます。各フォーム要素は、ng-modelを使用してこれにバインドする必要があります。

例えば:

http://jsfiddle.net/rd13/AvGKj/13/

<form ng-controller="MyCtrl" ng-submit="submit()"> 
    <input type="text" name="name" ng-model="formData.name"> 
    <input type="text" name="address" ng-model="formData.address"> 
    <input type="submit" value="Submit Form"> 
</form> 

function MyCtrl($scope) { 
    $scope.formData = {}; 

    $scope.submit = function() { 
     console.log(this.formData); 
    }; 
} 

上記フォームが送信されると$ scope.formDataは、あなたのAJAXリクエストに渡すことができ、フォームのオブジェクトが含まれています。例:

Object {name: "stu", address: "england"} 

質問に答えるには、AngularJSを使用してフォームデータを「シリアル化する」方法がありません。

ただし、jQuery:$ element.serialize()を使用できますが、Angularを正しく使用するには上記の方法を使用します。

+3

ページに複数のフォームがある場合、これはうまく機能しません。 ng-repeatディレクティブの一部として... – Kevin

+2

@Kevinは、動的に作成されたフォーム(ng-repeatディレクティブの一部など)用のng形式を調べます http://scotch.io/tutorials/javascript/building -dynamic-angular-forms-with-ngrepeat-and-ngform –

+0

私は質問がフォームのシリアル化に関するものだと思った。 –

関連する問題