在angularjs的select指令中从不同的源中设置选中的项
Setting selected item in angularjs select directive from a different source
我正在尝试用Angular JS创建一个表单,让您可以编辑地点(地址,城市等)。
后端运行Django,并通过REST API (Django REST Framework)可用,我通过Restangular服务与之交谈。
对于大多数表单元素,事情都是相当标准的。我有一个场地对象,只是填充项目,例如:
<input type="text" ng-model="venue.street">
但是,每个venue对象都有一个category,在后端,这个category对象是一个外键,所以在Django中应该是:
category = models.ForeignKey(Category)
现在,当通过REST API获取场地时,类别仅由类别对象的pk/id引用。因此,例如,这将是:
{
"id": 14,
"name": "test place",
"slug": "test-place",
"country": "Ireland",
"city": "Dublin",
[...etc...]
"category": 1
},
和一个单独的REST端点,得到我的类别:
[
{
"id": 1,
"name": "Rock"
},
{
"id": 2,
"name": "Classic"
},
{
"id": 3,
"name": "Jazz"
}
]
我的问题是,在编辑场地时,我希望类别的下拉菜单按名称显示类别,但只是将类别ID提供给后端,以及在第一次显示时预选场地的当前类别。
我是Angular的新手,但是,据我所知,Angular用对象本身的引用填充了一个select指令,而不是像ID这样简单的东西。
现在我有这个:
<select ng-model="venue.category" ng-options="category.name for category in categories track by category.id"></select>
显然,这不起作用,即使场地。类别只是一个数字,而类别。而且,它们不是同一个对象。
我可能在这里遗漏了一个明显的解决方案,但如果有任何建议,我将不胜感激。
谢谢!
Track by用于当您希望两个不同的对象在选择框中相等时。事实并非如此。你只需要模型是id本身。Angular是这样支持的:
http://jsfiddle.net/XLpFN/的例子:
<select ng-model="venue.category" ng-options="category.id as category.name for category in categories"></select>
$scope.categories = [
{"id": 1, "name": "Rock"},
{"id": 2, "name": "Classic"},
{"id": 3, "name": "Jazz"}
];
$scope.venue = {
"id": 14,
"name": "test place",
"slug": "test-place",
"country": "Ireland",
"city": "Dublin",
"category": 2
};
相关文章:
- 如何在页面中正确设置AngularJS控件
- 如何使用onDeviceReady设置AngularJS应用程序并初始化Cordova的功能
- 如何在JavaScript而不是HTML元素中设置AngularJS验证
- 设置AngularJS控制器属性不能是使用Coffeescript的最后一行
- 使用 API javascript 设置 AngularJS 模板
- 如何使用Javascript设置AngularJs属性
- 如何正确设置AngularJS文件
- 在项目启动时从$http设置Angularjs常量.获取
- 为时区设置 AngularJS 全局配置
- 无法设置属性'日期'在设置AngularJS UI引导日期选择器时未定义的
- 如何设置angularjs控制器
- 如何设置AngularJS项目以在使用不同的服务实现之间进行交替
- 动态设置AngularJS Directive元素的属性
- 设置AngularJS选择的选定值
- 如何使用python Selenium或JavaScript控制台设置AngularJS控制器变量的值
- 设置AngularJS工厂来共享数据
- JQuery UI slider '函数不设置angularJS的值
- 如何为非根基url设置AngularJS的$locationProvider HTML5模式
- 从变量中编程地设置AngularJS过滤器(如日期或货币)
- 如何使用AWS设置AngularJS应用程序?