如何在AngularJS中使用select对象数组来设置模型的值
How to set value to model in AngularJS using select with array of objects
我是AngularJS的新手,我想用最优雅的方式解决一个问题。
我有来自服务器的列表,并在我的应用程序中用作select
标记的option
的源。让我们假设它是一个作者列表,看起来像这样:
[
{ id: 1, name: 'Mark Twain' },
{ id: 2, name: 'Jack London' },
{ id: 3, name: 'Ernest Hemingway' }
]
我也有书模型来自并保存到服务器。书的属性之一是author
,用户可以从select
下拉菜单中选择。当book model被保存或从服务器获取时,它的author
字段表示为整数。下面是一个如何在服务器上保存book模型的示例,以及它在获取时的样子:
{
id: 324,
title: 'Martin Eden',
author: 2
}
book在我的应用程序中表示为Angular的$resource
,所以每当我想保存book模型时,我只需调用它的save方法。
为了实现这个逻辑,我尝试使用select
与ng-options
指令,像这样:
<select ng-options="author as author.name for author in authors track by author.id" ng-model="bookModel.author"></select>
但是这种方法的问题是,当我从下拉菜单中选择作者时,author
属性的值被设置为{ id: 2, name: 'Jack London' }
,但我需要它是作者的id。
这是一个小提琴,说明我的问题。尝试在下拉菜单中选择不同的值。在下拉列表中,您将看到bookModel.author
的更新值。我需要它是作者的id整数,而不是对象。所以每当我在下拉菜单中选择Jack London时,我需要bookModel.author
的值为2
,而不是{ id: 2, name: 'Jack London' }
。否则,无论何时book模型来自服务器,在保存之前,我都需要对数据进行操作。我想应该有更好的办法。也许这是可以实现的ng-options
指令?
我试过这样做:
<select ng-model="bookModel.author">
<option ng-repeat="author in authors" value="{{author.id}}">{{author.name}}</option>
</select>
它更接近,但这样bookModel.author
的值将是一个字符串,而不是整数。
我也知道我可以为book $resource设置transformRequest
和transformResponse
函数,它们将数据转换为适当的格式。但也许有更好的办法?
将感谢任何帮助!
你应该在你的ng-options
上使用author.id as author.name
:
<div ng-app="app">
<div ng-controller="testController">
<select ng-options="author.id as author.name for author in authors track by author.id" ng-model="bookModel.author"></select>
<pre>{{bookModel.author | json}}</pre>
</div>
</div>
或者,如果你想知道作者的名字:
<div ng-app="app">
<div ng-controller="testController">
<select ng-options="author.name as author.name for author in authors track by author.id" ng-model="bookModel.author"></select>
<pre>{{bookModel.author | json}}</pre>
</div>
</div>
更新1
更新你的小提琴
- 需要帮助设置json数组
- 数组在递归方法中设置为null
- 在for循环中使用多维数组设置google.maps.Marker图标
- Jquery数组-设置和加载值
- 通过过滤器数组设置对象数组的属性
- 如何将对象数组设置为格式为 { x: {Number}, y: {Number} }?Javascript
- 如何使用 AJAX 在 jquery 中将返回的 JSON 数组设置为变量
- 关联数组设置不正确
- 尝试将数据数组设置为从视图调用函数后$scope
- Javascript 截距数组设置值
- Javascript 将数组设置为另一个数组元素的属性
- 为什么调用array.prototype. foreach .call()时将数组设置为THIS对象不能工作?
- 使用Json数组设置折线路径
- 从数组设置Google电子表格单元格值,但所有值都是相同的
- 使用统一数组设置批处理顶点数组的alpha值
- 如何将整数数组设置为电子表格单元格
- 在mark.js中为单独的单词数组设置样式
- 在Javascript中将数组设置为json格式的值
- 有没有一种方法可以将类型化数组设置为零
- 我无法基于数组设置背景图像