私はAngularJSを初めて使いました。私は最も優雅な方法で1つの問題を解決しようとしています。オブジェクトの配列でselectを使用してAngularJSのモデルに値を設定する方法
私はサーバーから来て、私のアプリケーションではタグのoption
のソースとして使用されるリストを持っています。
[
{ id: 1, name: 'Mark Twain' },
{ id: 2, name: 'Jack London' },
{ id: 3, name: 'Ernest Hemingway' }
]
また、私はから来て、サーバーに保存ブックモデルを持っている:それはこのようになります作者のリストだと仮定します。ブックのプロパティの1つはauthor
で、select
ドロップダウンからユーザーが選択できます。 モデルが保存されたり、サーバからフェッチされた場合、author
フィールドは整数として表されます。ここでモデルは、サーバー上に保存する方法書籍の一例であり、それは時にフェッチされたどのように見えるか:
{
id: 324,
title: 'Martin Eden',
author: 2
}
ブックは角の$resource
私のアプリケーションで私は本モデルIを保存したいので、いつでものように表されるだけそれをsaveメソッドと呼ぶ。
<select ng-options="author as author.name for author in authors track by author.id" ng-model="bookModel.author"></select>
しかし、このアプローチの問題は、私はauthor
プロパティの値がドロップダウンから作者を選ぶときが設定されていることである。私はこのようなng-options
ディレクティブでselect
を使用しようとしました。このロジックを実装する
{ id: 2, name: 'Jack London' }
に、私はそれが著者のIDである必要があります。
ここに私の問題を示すFiddleがあります。ドロップダウンで異なる値を選択してみてください。ドロップダウンの下には、更新された値bookModel.author
が表示されます。私はそれがオブジェクトではなく、作者のid整数である必要があります。だから私がジャックロンドンドロップダウンを選択するたびに、私はbookModel.author
の値がでなく、{ id: 2, name: 'Jack London' }
であることが必要です。それ以外の場合は、というモデルがサーバーから来て、それを保存する前にデータを使用して操作する必要があります。私はもっと良い方法があると思います。多分ng-options
指令で達成できるものでしょうか?私が試してみました
は、このようにそれを実行します。
<select ng-model="bookModel.author">
<option ng-repeat="author in authors" value="{{author.id}}">{{author.name}}</option>
</select>
それは少し近いが、この方法だbookModel.author
の値は、文字列ではなく、整数になります。
また、transformRequest
とtransformResponse
という関数をbook $ resourceに設定して、データを適切な形式に変換することができます。しかし、もっと良い方法があるかもしれませんか?
助けていただきありがとうございます。
私はドロップダウンから著者を選択すると完璧に動作します。しかし、もし 'author'プロパティが既に値を持っていたら?私はその場合、ドロップダウンで選択して表示する必要があると考えましたが、そうではありません。ここには[Fiddle](https://jsfiddle.net/Cake_Seller/55zevgjr/4/)があります。表示されているように、selectにはオプションが選択されていません。 –
他の男が私にこの最終的な問題を解決する手助けをしました。必要なのは、 'track by author.id'の部分をng-options指令から削除することだけです。ここに最終的な[フィドル](https://jsfiddle.net/Cake_Seller/55zevgjr/7/)があります。 ご協力いただきありがとうございます! –