2016-03-26 20 views
0

これはなぜ機能しないのですか?Angular ng-options selectedオブジェクト

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}; 

} 

私は事は、私はその可能性がteacherSel =介して、これを実行することを知って、選択された要素がファクンド なることを期待しますid とng-options = "teacher.id as teacher.id" ... しかし、私はまだオブジェクトを持っています。新しいオブジェクトが必要です。 idだけではない。

jsfiddle: http://jsfiddle.net/Lngv0r9k/

答えて

0

マイケル・ローズは、右のそれを得ました。これは角1.2以降の作品

ng-options="teacher.name for teacher in teachers track by teacher.ID" 

を次のように別のオプションは、track by文を使用して値による比較を行うために、角に強制されるだろう。 更新日:http://jsfiddle.net/Lngv0r9k/3/

+0

は答えてくれてありがとう – GruberEDU

0

問題は、選択したエントリの比較が値ではなく参照によって行われることです。 $scope.teacherSelは配列内のものとは別のオブジェクトであるため、選択されたものにはなりません。

したがって、配列内で選択したエントリを見つけて、次のように使用する必要があります。$scope.teacherSel = $scope.teachers[indexOfSelectedEntry]

は、あなたの更新jsfiddleの下部にある参照してください:あなたの例ではhttp://jsfiddle.net/Lngv0r9k/1/

0

あなたはroom.teacherに教師のオブジェクトを与えてはいけないので、NG-オプションはNG-モデルには、何も一致傾けます。 下記の画面に表示されているように、値=?は、一致する正しい値を見つけることができないことを意味します。

あなたは、たとえば試みることができる:NG-オプションはかなり混乱しているよう

$scope.room = { 
     teacher: $scope.teachers[an item index]; 
    }; 

OR

$scope.room = { 
     teacher: { 
    "ID": "1", 
    "name": "Adolf Ingobert", 
    "short": "AD", 
    "display": "Adolf I.", 
    "sectionFK": "2", 
    "invisible": "0" 
     }; 
    }; 

enter image description here

関連する問題