当选项处于 ng-repeat 中时,如何初始化选择值



起初我尝试了<select name='size' ng-model='sid' ng-options='y.id as y.title for y in arr'> .但是当提交表单时,发布的变量size不是 id 472 473 474而是索引0 1 2

然后我尝试ng-options='y.title for y in arr track by y.id'.但是所选的模型sid不是473而是{"id":473,"title":"bb"}所以我无法通过ng-init='sid = 473'将 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/

记得阅读文档:

"不要在同一表达式中使用选择为和跟踪依据。它们不是为协同工作而设计 https://docs.angularjs.org/api/ng/directive/ngOptions 的。

http://jsfiddle.net/qm7f2kqj/

您所需要的只是修复您的ng选项:

<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>

https://stackoverflow.com/a/18502634/3657140

使用不可见的输入<input name="profile_id" type="text" style="margin-left:-10000px;" ng-model="profile"/>

我找到了一个解决方案,但它并不理想。欢迎任何有好主意的人分享。

最新更新