我有一个表单用于更新从restful服务填充的记录。
其中一个字段使用select作为查找值,我将它绑定到模型中的对象。
正确创建了选择,选择选项会对我的模型进行正确的更改。
问题是当我最初加载页面时,选择为空白。
有没有办法正确设置初始值,而不必抓取查找对象并匹配id以获取自动生成的索引位置?
或者更好的是,将值设置为对象而不是自动生成的索引。
<div ng-controller="MyCtrl">
Id: <input ng-model="course.id" readonly><br>
Cost: <input ng-model="course.cost" ng-required="true"><br>
Title: <select ng-model="course.courseTitle" ng-options="title.name for title in courseTitles">
</select> {{course.courseTitle.description}}<br>
Length: <input ng-model="course.length" ng-required="true"><br>
<br>
Id: {{course.id}}<br>
Cost: {{course.cost}}<br>
Title: {{course.courseTitle.name}}<br>
Length: {{course.length}}
</div>
function MyCtrl($scope) {
$scope.course = {
"id": "108",
"cost": "155",
"courseTitle": {
"description": "Description of course 37.",
"id": "37",
"name": "Course 37 Name"
},
"length": "7"
};
$scope.courseTitles = [{
"description": "Description of course 37.",
"id": "37",
"name": "Course 37 Name"},
{
"description": "Description of course 63.",
"id": "67",
"name": "Course 63 Name"},
{
"description": "Description of course 88.",
"id": "88",
"name": "Course 88 Name"}];
}
我在这里创造了一个小提琴 - http://jsfiddle.net/bcarter/Jxydp/
答案 0 :(得分:5)
使用&#34;跟踪&#34; ng-options的条款
<select ng-model="course.courseTitle"
ng-options="title.name for title in courseTitles track by title.id">
</select>
这将导致比较通过title.id == other.id进行检查,而不是title == other
答案 1 :(得分:1)
这是因为您在此处使用了两个不同的对象。
{
"description": "Description of course 37.",
"id": "37",
"name": "Course 37 Name"
}
定义两次,创建两个不同的引用。如果您使用相同的对象,它将按预期工作。请参阅http://jsfiddle.net/Jxydp/14/(可能有更好的方法,但它说明了我的观点)
答案 2 :(得分:0)
这可能有点自以为是,但我认为更改数据结构会更好。只需要一个包含模型的数组
$scope.courses = [{
"cost": "155",
"description": "Description of course 37.",
"id": "37",
"name": "Course 37 Name",
"length": "8"
},{
"cost": "156",
"description": "Description of course 63.",
"id": "67",
"name": "Course 63 Name",
"length": "9"
},{
"cost": "157",
"description": "Description of course 88.",
"id": "88",
"name": "Course 88 Name",
"length": "9"
}];
然后将ngModel
元素中的ngOptions
和select
更改为
<select ng-model="course" ng-options="course.name for course in courses">
然后在你的控制器中告诉angular将你课程中的任何课程设置为初始课程
$scope.course = $scope.courses[0];
这样您就不必担心另一个物体并保持同步,让角度为您做。
JSfre here http://jsfiddle.net/jaimem/uuCfx/1/