Angular ng-options选择对象

时间:2016-03-26 17:19:28

标签: javascript angularjs

为什么这不起作用?

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/

3 个答案:

答案 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"
      };
    };

enter image description here