【问题标题】:Assign ng-model an object in a select在选择中为 ng-model 分配一个对象
【发布时间】:2016-12-25 01:58:26
【问题描述】:

我正在迭代一个范围并为每个索引填充新的选择选项。这些选项与我正在迭代的范围无关,而是不同类型的选项。代码如下:

<div ng-repeat="i in range(booking.numberOfRooms) track by $index">
    <p>Room {{$index + 1}}</p>
    <select ng-model="booking.roomSelection[$index]" ng-options="obj.roomType as obj.roomType for obj in roomTypes" ng-init="booking.roomSelection[$index] = { id: $index + 1, roomType: 'Double' }"> </select>
</div>

如何将对象数组分配给 ng-model(就像 ng-init 中的那样)?例如。对于两个房间,ng-model 的结果应该是这样的:

booking.roomSelection = [{id: 1, roomSelection: 'Double'}, {id: 2, roomSelection: 'Double'}]

【问题讨论】:

    标签: javascript angularjs json angular-ngmodel angularjs-ng-init


    【解决方案1】:

    原来ng-model属性必须改成:booking.roomSelection[$index].roomType

    对象数组也必须在控制器中声明,例如$scope.booking.roomSelection = [];

    完整的声明是:

    <div ng-repeat="i in range(booking.numberOfRooms) track by $index">
        <p>Room {{$index + 1}}</p>
        <select ng-model="booking.roomSelection[$index].roomType" ng-options="obj.roomType as obj.roomType for obj in roomTypes" ng-init="booking.roomSelection[$index] = { id: $index + 1, roomType: 'Double' }"></select>
    </div>
    

    【讨论】:

    • 如果ng-options="obj as obj.roomType for obj in roomTypes",也可以使用ng-model="booking.roomSelection[$index]"
    【解决方案2】:

    只需绑定到您的booking.roomSelection 并删除ng-init。如果您选择两个选项,它们的值将是pushedbooking.roomSelectionbooking.roomSelection 将是一个数组

    <select multiple ng-model="booking.roomSelection" ng-options="obj.roomType as obj.roomType for obj in roomTypes"></select>
    

    【讨论】:

    • 不幸的是,这不会推送到 ng-model,它只会分配选择的值,该值会被所选选项的值覆盖。 IE。 book.roomSelection 只会是一个值。
    • @ImranNZ 您想选择 2 个选项并在 booking.roomSelection 中获取它们的值,是吗?
    • 在选择上添加multiple属性
    • 感谢您帮助苏仁,我应该说清楚的。我为每个房间都有一个新的投递箱(不是多选)。
    猜你喜欢
    • 2016-04-26
    • 2017-11-11
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    相关资源
    最近更新 更多