使用 angular ng-options 在 <select> 中设置默认值可能使用 ng-init

Set default value in <select> with angular ng-options maybe using ng-init

我在html

中有这个
<select ng-model="inventory.condition"
        ng-init="inventory.condition = con"
        ng-options="con.name for con in conditions"
    <option >-- choose condition --</option>
</select>
{{inventory.condition}}

在 js angular 控制器上:

$scope.conditions = [
        {"name":"New","id":101},
        {"name":"Used","id":102},
        {"name":"Like new","id":103},
        {"name":"Not Working","id":104}
] 
$scope.inventory.condition = {"name":"Used","id":102};

SELECT 填充工作正常,如果我 select 列表中的项目正确设置 ng-model 并且 Htlm 正确显示模型 selected(我想得到完整的模型 selected,不仅是 "id" 值),但在构建列表时我无法设置默认值。

想法是接收一个模型(js 对象),其中包含默认值(真正来自 WS 的 html 请求,该请求之前保存在数据库中)和 select 默认值带有模型值的项目,如果用户 select 是一个新项目,它可以更改相同的模型(稍后我将再次 update/persist)。

问题是$scope.inventory.condition必须是$scope.conditions数组元素,两个对象只有当它们是同一个对象时才相等。所以你不能只设置 $scope.inventory.condition = {"name":"Used","id":102};: event 虽然 {"name":"Used","id":102} 看起来像数组的第二个值,但实际上它们并不相等,所以 Angular 不会将它设置为默认值。

您需要像这样设置模型值:

$scope.conditions = [
    {"name":"New","id":101},
    {"name":"Used","id":102},
    {"name":"Like new","id":103},
    {"name":"Not Working","id":104}
];
$scope.inventory.condition = $scope.conditions[1];