【问题标题】:AngularJS: Preselecting multiple options in listboxAngularJS:在列表框中预选多个选项
【发布时间】:2014-08-06 17:48:22
【问题描述】:

我的标记如下所示:

<select multiple="multiple" size="7" 
     ng-model="model.SelectedCars" 
     ng-options="car.Code as car.Name for car in model.Cars track by car.Code">
</select>

我已使用以下内容初始化了我的范围:

$scope.model.SelectedCars = [];
$scope.model.Cars = [
{Name: 'Car 1', Code: 'id01'},
{Name: 'Car 2', Code: 'id02'},
{Name: 'Car 3', Code: 'id03'}
];

这一切都按照我想要的方式工作(汽车名称显示在列表框中,代码用作值)。当我从列表框中选择某些内容(甚至是多个值)时,$scope.model.SelectedCars 数组最终会填充每个选定汽车的代码(1d 字符串数组)。

我的问题是,为什么如果我手动将有效代码推送到 $scope.model.SelectedCars 数组中,它是否不会反映在所选的 UI 控件中。这只发生在使用ng-optionsng-repeat 时,似乎如果我将选项硬编码到它确实有效。

服务器只会将我选择的汽车模型作为一维代码(字符串)数组提供。我宁愿保持 ng-model 的数据结构原样,这样我就可以在发布之前不做任何更改就将其发送出去。

感谢任何帮助!

【问题讨论】:

  • $scope.$apply()之后更新了吗?

标签: angularjs select options ng-options angularjs-ng-options


【解决方案1】:

This is a known issue

也就是说,如果您从 ngOptions 中删除 track by,您可以将 model.Cars.code 添加到 model.selectedCars 列表中,这样两种方式的绑定就会起作用。

<select multiple="multiple" size="7" 
    ng-model="model.SelectedCars" 
    ng-options="car.Code as car.Name for car in model.Cars"></select>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-21
    • 2011-08-17
    • 2017-06-12
    • 2014-03-11
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    相关资源
    最近更新 更多