3

最初に試してみ<select name='size' ng-model='sid' ng-options='y.id as y.title for y in arr'>ました。しかし、フォームが送信されたとき、posted 変数sizeは id472 473 474ではなく index0 1 2です。

それから私は試しng-options='y.title for y in arr track by y.id'ました。しかし、選択されたモデルsidはそうではありません473{"id":473,"title":"bb"}、その 473 項目を でデフォルトにすることはできませんng-init='sid = 473'

最後に、option ng-repeat='y in arr'以下のように使用する必要があります。しかし、オプションが繰り返される前に初期化されるため、ng-initは役に立たないようです。どうすればそれを機能させることができますか?

ありがとう。

<div ng-controller="Ctrl">
    <select ng-model='sid' ng-init='sid = 473'>
        <option ng-repeat='y in arr' value='{{ y.id }}'>
            {{ y.id+' - '+y.title }}
        </option>
    </select>
    {{ sid }}
    <button ng-click='sid=474'>change to 474</button>
</div>
<script>
var app =angular.module('app', []);

function Ctrl($scope){
    $scope.arr = [{"id":472,"title":"aa"},{"id":473,"title":"bb"},{"id":474,"title":"cc"}];
}
</script>

http://jsfiddle.net/hcLVE/86/

4

2 に答える 2

1

ドキュメントを読むことを忘れないでください:

「select as と track by を同じ式で使用しないでください。これらは一緒に動作するようには設計されていません。」https://docs.angularjs.org/api/ng/directive/ngOptions

http://jsfiddle.net/qm7f2kqj/

必要なのは、ng-options を修正することだけでした。

<div ng-controller="Ctrl">
    <select ng-init="sid = 473" ng-model='sid'
      ng-options="y.id as ( y.id + ' - ' + y.title) for y in arr">
    </select>
    <input type="hidden" name="size" value="{{sid}}"/>
    {{ sid }}
    <button ng-click='sid=474'>change to 474</button>
</div>
于 2015-03-10T18:37:40.033 に答える