33

関連するコードをいじる: http://jsfiddle.net/gFCzV/7/

ng-repeat で参照されるオブジェクトの子コレクションにバインドされているドロップダウンの選択値を設定しようとしています。私が知っている方法でバインドされているコレクションを参照できないため、選択したオプションを設定する方法がわかりません。

HTML :

<div ng-app="myApp" ng-controller="SomeController">
    <div ng-repeat="Person in People">
        <div class="listheader">{{Person.firstName}} {{Person.lastName}}</div>
        <div class="listitem" ng-repeat="Choice in Person.Choices">
            {{Choice.Name}}: 
            <select 
                ng-model="Choice.SelectedOption"                 
                ng-options="choice.Name for choice in Choice.Options"></select>
            {{Choice.SelectedOption.ID}}
        </div>
    </div>
</div>

JS :

var myApp = angular.module('myApp', []);
myApp.controller("SomeController", function($scope) {
    $scope.People = [{
        "firstName": "John",
        "lastName": "Doe",
        "Choices": [
            {
                "Name":"Dinner",
                "Options":[{Name:"Fish",ID:1}, {Name:"Chicken",ID:2}, {Name:"Beef",ID:3}],
                "SelectedOption":{Name:"Chicken",ID:2} //this doesn't work
            },
            {
                "Name":"Lunch",
                "Options":[{Name:"Macaroni",ID:1}, {Name:"PB&J",ID:2}, {Name:"Fish",ID:3}],
                "SelectedOption":""
            }
        ],        
    }, {
        "firstName": "Jane",
        "lastName": "Doe"
    }];
});

これは、モデルで SelectedIndex を使用して実際に ng-init を使用する必要がある唯一のケースですか?

4

3 に答える 3

80

AngularJS 1.2 を使用している場合は、'track by' を使用して Angular にオブジェクトの比較方法を指示できます。

<select 
    ng-model="Choice.SelectedOption"                 
    ng-options="choice.Name for choice in Choice.Options track by choice.ID">
</select>

更新されたフィドルhttp://jsfiddle.net/gFCzV/34/

于 2014-08-09T13:12:10.353 に答える
32

IDフィールドを等価識別子として使用できます。AngularJS はオブジェクトを比較するときに参照の等価性をチェックするため、この場合にはアドホック オブジェクトを使用できません。

<select 
    ng-model="Choice.SelectedOption.ID" 
    ng-options="choice.ID as choice.Name for choice in Choice.Options">
</select>
于 2013-12-30T18:36:11.303 に答える
10

選択した値にng-selectedを使用します。AngularJS v1.3.2 でコードを正常に実装しました

<select ng-model="objBillingAddress.StateId"  >
   <option data-ng-repeat="c in States" value="{{c.StateId}}" ng-selected="objBillingAddress.BillingStateId==c.StateId">{{c.StateName}}</option>
                                                </select>

于 2016-01-21T07:19:53.383 に答える