为什么这不起作用?
HTML:
<div ng-controller="MyCtrl">
<select class="rp-admin-rooms-selected-select" name="teacherSelect" id="teacher"
ng-model="teacherSel"
ng-options="teacher.name for teacher in teachers "
>
</select>
{{teacherSel}}
</div>
JS:
var myApp = angular.module('myApp',[]);
//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});
function MyCtrl($scope) {
$scope.teachers = [
{name:'Facundo', id:1},
{name:'Jorge', id:3},
{name:'Humberto', id:5},
{name:'David', id:7},
]
$scope.teacherSel = {name:'Facundo', id:1};
}
我希望被选中的元素是 Facundo 问题是,我知道可以通过teacherSel = id 来实现这一点 和ng-options =&#34; teacher.name as teacher.id&#34; ... 但我还有他们的对象,我需要新的对象。不只是id。
的jsfiddle: http://jsfiddle.net/Lngv0r9k/
答案 0 :(得分:0)
track by
语句按值进行比较,如下所示:
ng-options="teacher.name for teacher in teachers track by teacher.ID"
这适用于角度1.2及之后。 更新了小提琴:http://jsfiddle.net/Lngv0r9k/3/。
答案 1 :(得分:0)
问题在于所选条目的比较是通过引用而不是值来完成的。由于您的$scope.teacherSel
与数组中的对象不同,因此它永远不会被选中。
因此,您需要在数组中找到所选条目,然后按如下方式使用:$scope.teacherSel = $scope.teachers[indexOfSelectedEntry]
。
请参阅更新后的jsfiddle底部:http://jsfiddle.net/Lngv0r9k/1/
答案 2 :(得分:0)
在您的示例中,您没有将教师对象提供给 room.teacher ,因此ng-options无法与ng-model匹配任何内容。 正如您在下面的屏幕上看到的那样, value =?意味着它无法找到匹配的正确值。
您可以尝试例如:
$scope.room = {
teacher: $scope.teachers[an item index];
};
或强>
$scope.room = {
teacher: {
"ID": "1",
"name": "Adolf Ingobert",
"short": "AD",
"display": "Adolf I.",
"sectionFK": "2",
"invisible": "0"
};
};