【问题标题】:Set default value in <select> with angular ng-options maybe using ng-init在 <select> 中使用角度 ng-options 设置默认值可能使用 ng-init
【发布时间】:2015-03-25 21:16:55
【问题描述】:

我在 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 角度控制器:

$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 填充工作正常,如果我在列表中选择一个项目,它会正确设置 ng-model 并且 Htlm 会正确显示所选模型(我想要选择完整的模型,不仅是“id”值),但是构建列表时我无法设置默认值。

这个想法是接收一个包含默认值的模型(js 对象)(真正来自 WS 的 html 请求,该请求之前保存在 DB 上)并使用模型中的值选择默认项,如果用户选择一个新项目,它可以更改相同的模型(稍后我将再次更新/保留)。

【问题讨论】:

    标签: javascript angularjs controller ng-options ng-init


    【解决方案1】:

    问题是$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];
    

    【讨论】:

    • 哦……谢谢@dfsq。你是绝对正确的,所以为了完成我的最终解决方案,我使用 $filter 从 $scope.conditions 数组中获取正确的元素并将其设置为 ng-model。我确定还有其他方法可以找到它,但如果有问题请告诉我,再次感谢:$scope.inventory.condition = $filter('filter')($scope.conditions, {id: $scope.inventory.condition.id}, true)[0];
    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多