2017-02-01 9 views
0

私のAngular1.xアプリでは、私のモデルはラジオ選択に正しくマップされますが、ラジオボタン自体は最後のものを除き選択されていません。問題が何であるかは分かりません。この動作を説明するために、私は非常に小さな例を作成しました。どんな助けでも大歓迎です。角型ラジオの選択が正しくチェックされていません

http://plnkr.co/edit/dgGCvtOEb9WKTNtQHjqd?p=preview

angular.module('todoApp', []) 
 
    .controller('TodoListController', function() { 
 
    var todoList = this; 
 
    todoList.questions = [{ 
 
     "category": "Movies", 
 
     "questions": [{ 
 
      "title": "M1", 
 
      "score": "4", 
 
      }, 
 
      { 
 
      "title": "M2", 
 
      "score": "2", 
 
      } 
 
     ] 
 
     }, 
 
     { 
 
     "category": "Foods", 
 
     "questions": [{ 
 
      "title": "F1", 
 
      "score": "3", 
 
      }, 
 
      { 
 
      "title": "F2", 
 
      "score": "4", 
 
      } 
 
     ] 
 
     }, 
 
     { 
 
     "category": "Sports", 
 
     "questions": [{ 
 
      "title": "S1", 
 
      "score": "5", 
 
     }] 
 
     } 
 
    ]; 
 

 
    });
<!doctype html> 
 
<html ng-app="todoApp"> 
 
    <head> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script> 
 
    <script src="todo.js"></script> 
 
    <link rel="stylesheet" href="todo.css"> 
 
    <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css"> 
 
    </head> 
 
    <body> 
 
    <h2>Todo</h2> 
 
    <div ng-controller="TodoListController as todoList"> 
 
     <div ng-repeat="(ccKey, cc) in todoList.questions"> 
 
     <hr/> 
 
     <div> 
 
      <b style="color: red;">Category</b> : {{cc.category}} 
 
     </div> 
 
     <div ng-repeat="(qqKey, qq) in cc.questions"> 
 
      <br/> 
 
      {{qq.title}} : Selected Score: {{qq.score}} 
 
      <br/> 
 
      <div ng-repeat="n in [].constructor(5) track by $index"> 
 
      <input type="radio" ng-model="qq.score" name="q-{{ccKey}}-{{qqKey}}" value="{{$index+1}}"><br/>Score: {{$index+1}} : Group: q-{{ccKey}}-{{qqKey}} 
 
      </div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </body> 
 
</html>

答えて

1

あなた<input type="radio">タグからname属性を削除してください。これはあなたのラジオタグを管理するためにAngularがやっていることと矛盾しているようです。私は選択されたすべてのカテゴリを見ることができます、そして、選択はまだ与えられた質問の中でグループ化されます。角度入力[ラジオ]ドキュメントで

、彼らはname属性使用して表示されません:何がしたいことは値の初期選択すると、ページが最初にロードされた場合https://docs.angularjs.org/api/ng/input/input%5Bradio%5D

0

は、その後、

ng-value="($index+1).toString()" 
を使用

あなたのスコアは文字列で与えられているので、 "ng-value"を使用するときにスコアに一致するように数値を文字列に変換する必要があります。以上、あなただけの整数としてあなたのスコアを設定し、コードそのままの残りの部分を残すことができます:

todoList.questions = [{ 
     "category": "Movies", 
     "questions": [{ 
      "title": "M1", 
      "score": 4, 
      }, 
      { 
      "title": "M2", 
      "score": 2, 
      } 
     ] 
     }, .... 

Here is a modified plunker

関連する問題