5

Angular 選択を含むフォームを投稿すると、その値ではなく、選択したオプションの配列インデックスが送信されます。サーバーはこれらのインデックスを認識していないため、文字列を送信する必要があります。どうすればこれを修正できますか?

jsfiddle.net/2SuZGから:

<form method="post" action="/my/post/endpoint">
    <select name="resource" ng-options="r for r in ['a', 'b']"
            ng-model="selectedResource"></select>
    <button type="submit">Save</button>
</form>

投稿されたフォームが送信しているフィドルのコンソール出力から確認できますが、resource=0必要ですresource='a'(注:私のフィドルでは、フォームをシリアル化していますが、これは投稿内容を確認するためだけです。私のアプリでは、実際に実際のエンドポイントに投稿しています。)

これはこの質問と似ていますが、「値について心配する必要はありません」という回答がありました。しかし、私の場合はフォームを投稿しているので、値が気になります。ここで非常に基本的なものが欠けているに違いありません。ありがとう!

4

4 に答える 4

6

$scope にすべての関連データがあり、それがシリアライズしたいものであるため、フォームを jquery でシリアライズするべきではありません ($http または $resource で投稿するサブセットまたはオブジェクト)。 . アプローチに固執している場合は、データ要素の実際の名前で非表示の入力を作成します: http://jsfiddle.net/2SuZG/1/

<select name="resourceTemp" ng-options="r for r in ['a', 'b']"
        ng-model="selectedResource"></select>
<input type="hidden" name="resource" value="{{selectedResource}}" >

私はこれをお勧めしませんが、それはあなたがやりたいことです。

于 2013-05-26T19:14:10.393 に答える
3

ng-option は配列で機能します。ng-option を使用する場合は、このように配列を作成します

r = [{ "value": 1, "text": "a" }, { "value": 2, "text": "v" }];  

<select ng-option="obj.value as obj.text for obj in r">

または、あなたの場合は ng-repeat を使用できます

<form method="post">
        <select name="resourceTemp" ng-model="selectedResource">
            <option ng-repeat="r in ['a','b']" value="{{r}}">{{r}}</option>
        </select>
        <input type="hidden" name="resource" value="{{selectedResource}}" >
        <button type="submit">Save</button>
</form>

http://jsfiddle.net/nHyET/

于 2013-05-28T10:54:06.803 に答える
1

簡単な答えは、フォームを投稿しないことです。POSTエンドポイントにデータを送信する場合は、 $httpまたは$resourceを使用します。

ドキュメントに関する Mark Rajcok のコメントをチェックしてください: http://docs.angularjs.org/api/ng.directive:select

于 2013-05-26T19:12:33.947 に答える