Select 以 ng-options 和数组作为值

Select with ng-options and array as value

我有以下数组:

$scope.array = [{value: ['a'], name: 'A'}, {value: ['a', 'b'], name: 'A/B'}, {value: ['a', 'b', 'c'], name: 'ABC' }];

我想添加一个 select 到我的 html 从数组加载数据。关键是我想把键的值 value 作为选项的值,但它没有正确地 selecting 默认选项。

<select class="form-control" ng-options="element as element.name for element in array track by element.value" ng-model="form.element"></select>

当我启动应用程序时,我用于 ng-model 的对象如下所示:

$scope.form = {element: ['a'], otherField: 'test'}

所以它应该 select 数组的第一个元素作为默认值,但它不起作用。

您可以在此处找到 fiddle:Fiddle

选项框需要包含您尝试 select 的项目。由于您将参考对象放入选项框中,因此您的选项框必须包含一个与您希望默认 select 编辑的项目具有相同参考的项目。

我已经更新了 fiddle

中的 JS

这是新的 JS

function Controller($scope) {
    $scope.array = [{value: ['a'], name: 'A'}, {value: ['a', 'b'], name: 'A/B'}, {value: ['a', 'b', 'c'], name: 'ABC' }];

    $scope.form = {element: $scope.array[0]}
}

当您使用 ng-options 指令时,对象将具有您的 selected 对象的原型(在您的情况下)属性 value 和属性 name

在你的样本中是这样的:{value: ['a'], name: 'A'}

因此,首先要做的是使用具有此形状的对象设置您的 ng-model,以便能够选择默认值:

$scope.form = {element: {value: ['a'], name: 'A'}}

那么您的 ng-options 中的语法跟踪将定义 select 的默认值。

您不能在示例中使用属性 value,因为它是一个数组,并且 ng-options 不知道如何比较数组。 ng-options 可以通过 id、数字或字符串定义默认值。

我建议您使用 属性 之类的名称(或者如果您愿意,可以创建一个 id)这样 ng-options 将能够确定默认值

<select class="form-control" ng-options="element as element.name for element in array track by element.name" ng-model="form.element"></select>

有了这两个改变你的默认 selection 将 运行