61

select以下を使用して、配列をタグにバインドするとします。

<select ng-model="selData" ng-options="$index as d.name for d in data">

この場合、関連付けられoptionたタグには一連のインデックス値 (0、1、2、...) が割り当てられます。ただし、ドロップダウンから何かを選択すると、 の値selDataが にバインドされundefinedます。バインディングは実際に機能する必要がありますか?

一方、代わりに次のことを行うとします。

<select ng-model="selData" ng-options="d as d.name for d in data">

ここでは、optionタグは同じインデックスを取得しますが、オブジェクト全体が変更時にバインドされます。このように動作するのは設計によるものですか、それともこの動作は単なる AngularJS のバグまたは副作用ですか?

4

5 に答える 5

23

$index は select ではなく ng-repeat に対して定義されています。これで説明がつくと思いますundefined。(だから、いいえ、これはうまくいかないはずです。)

Angular は、オブジェクト全体のバインディングをサポートしています。ドキュメントはこれを示すためにより適切に表現できますが、それを示唆しています:「選択モデルを非文字列値にバインドする場合は、ngRepeat の代わりに ngOptions ... を使用する必要があります。」

于 2012-12-17T15:47:17.180 に答える
1

$indexselect タグ内では使用しないでください。$index配列インデックスを値またはオプションとして使用する場合は、オプション タグ内で使用します。

<option ng-repeat="user in users" value="{{user.username}}">{{$index+1}}</option>

内部値を使用する場合は、次のようなバインディング式として value 属性に入れます。

<option ng-repeat="user in users" value="{{$index+1}}">{{user.username}}</option>

そして私のコントローラコードは次のようになります:

var users = ['username':'bairavan', 'username':'testuser'];
于 2018-05-30T06:42:35.813 に答える