2014-09-30 2 views
2

*이 코드는 내 html 파일입니다. 처럼 배열로 구성된 챕터를 반복하고 싶습니다. 내 코드는 선택된 체크 상자 만 (인덱스 값)을 true로 바인딩합니다. 하지만 난 장의 전체 목록과 그들의 i.d의 제출에 검색 할 필요합니다.ng-repeat angularjs의 데이터 바인딩

[{ "이름": "제 1 장 : 음성 메시지", " 중첩 루프에 그것을 반복 *

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<span ng-repeat="chapter in chapters"> 
 
       
 
       \t <label><input type="checkbox" name="checkbox" value="{{chapter}} ng-model="escConfigForm.chapters[$index]" >{{chapter.name}}</label><br> 
 
       
 
        
 
</span> 
 
<input type="submit" id="save" value="Save" />

$scope.chapters = chapterService.getChapters($scope.isbn); 
$scope.submit = function(escConfigForm) { 

     var postData = { 
      content_items: JSON.stringify({ 
       "@context" : [], 
       "@graph" : [ { 
        "@type" : "ContentItemPlacement", 
        "placementOf" : { 
         "@type" : "LtiLink", 
         "text" : escConfigForm.examName, 
         "mediaType" : "application/vnd.ims.lti.v1.launch+json", 
         "title" : "Exam Study Center", 
         "custom" : { 
          "dueDate" : escConfigForm.examDueDate, 
          "targetScore" : escConfigForm.examTargetScore, 
          "chapters" : escConfigForm.chapters 
         }, 
         "activityType" : "other", 
         "activityRefId" : $scope.escId 
        } 
       } ] 
      }), 
      data: $scope.data 
     }; 

     postForm($scope.postUrl, postData);   

     var configData = { 
      "activityRefId" : $scope.escId, 
      "dueDate" : escConfigForm.examDueDate, 
      "targetScore" : escConfigForm.examTargetScore, 
      "chapters" : escConfigForm.chapters 
     }; 
     console.log($scope.chapters); 

JSON 파일하는 방법을 알아낼 수 없습니다 "id": "832115"}, { "name": "2 장 : 물리학", "id": "832115"} ...]

+1

입력에 값이 –

+0

당신은'을 '포함하려고이 코드에 닫혀 있지 않습니다 ** ** **

+0

컨트롤러 코드를 스 니펫에 추가 할 수 있습니까 –

답변

0

여기에 스 니펫 용 컨트롤러를 만들고 몇 가지 da ta to $ scope.chapters 객체가 올바르게 표시되고 있습니다. 값을 선택하면 사라지지만 다른 문제입니다.

angular.module('myApp', []) 
 
    .controller('myCtrl', ['$scope', 
 
    function($scope) { 
 

 
     $scope.chapters = [{ 
 
     name: 'Chapter 1: Negative Messages', 
 
     id: "1", 
 
     isSelected: false 
 
     }, { 
 
     name: 'Chapter 2: Physics', 
 
     id: "2", 
 
     isSelected: false 
 
     }]; 
 

 
     $scope.submitItems = function(chapters) { 
 
     alert(JSON.stringify(chapters)); 
 
     } 
 

 
    } 
 
    ]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="myApp"> 
 
    <div ng-controller="myCtrl"> 
 
    <span ng-repeat="chapter in chapters">     
 
     <input type="checkbox" name="checkbox" value="{{chapter}}" 
 
       ng-model="chapter.isSelected" /> 
 
     {{chapter.name}} 
 
    </span> 
 
    <br> 
 
    <form ng-submit="submitItems(chapters)"> 
 
     <input ng-model="chapters" type="submit" id="save" value="Save" /> 
 
    </form> 
 
    </div> 
 
</div>

편집 : 영업의 요구를 반영하기 위해 코드를 업데이트했습니다.

+0

고맙습니다. 상자를 체크 한 부분에 도움이되었습니다. 그러나 양쪽 모두를 선택하면 [$ index] 장은 0 : true, 1 : true를 되돌려 보냅니다.사실 제 1 장 : 부정적인 메시지 ID : 1 리소스 1 : 사실 2 장 : 물리학 ID : 2 처럼이 다시 당신이하고자하는 그래서 – Jas1234

+0

를 전체 목록을 검색 내가 그것을 할 필요가 는 그 자원 0 지적 제출 과정에서 선택된 모든 항목을 제출하는 것입니까? –

+0

옙 .., 완전히. – Jas1234

1

컨트롤러에서 선택한 개체의 목록을 유지 관리하는 것이 좋습니다. referenece이 게시물을 사용

: http://jsfiddle.net/ruwk5r0v/7/

<div ng-app="formExample"> 
<div ng-controller="ExampleController"> <span ng-repeat="chapter in chapters" ng-click="checkboxChange($index)" ng-checked="selection.indexOf($scope.chapters[$index]) > -1">     
     <input type="checkbox" name="checkbox" value="{{$index}}" /> 
     {{chapter.name}} 
     <br> 
    </span> 

    <br> 
    <input type="submit" ng-click="submitForm()" id="save" value="Save" /> 


<div> <span ng-repeat="chapter in selection">      
     <span> 
      {{chapter.name}} 

     </span> 
    <br> 
</div> 

및 JS : I이 바이올린 생성

How do I bind to list of checkbox values with AngularJS?

angular.module('formExample', []).controller('ExampleController', ['$scope', function ($scope) { 

$scope.chapters = [{ 
    "name": "Chapter 1: Negative Messages", 
    "id": "832115" 
}, { 
    "name": "Chapter 2: Physics", 
    "id": "832115" 
}]; 

$scope.submitForm = function() { 
    console.log(selection); 
} 

$scope.selection = [] 

$scope.checkboxChange = function(index){ 

    var chapter = $scope.chapters[index]; 
    var idx = $scope.selection.indexOf(chapter); 

    if (idx > -1){ 
     $scope.selection.splice(idx, 1); 
    } else { 
     $scope.selection.push(chapter); 
    } 
} 

}]);

여기에서 새 선택 개체를 사용하여 제출 기능을 매우 쉽게 구현할 수 있습니다.

정말 지시어로 이동해야합니다,하지만 지금 있음을 쓸 시간이 없어 : P

+0

그게 다 가깝습니다. 내가 필요한 것은 선택한 챕터를 백엔드 또는 포스트 데이터로 차는 것입니다. 컨트롤러에 대한 전체 코드를 변경하고 이에 대한 지시문을 작성해야합니까? : \ – Jas1234

+0

오 그래, 챕터가 객체의 최상위 수준 인 것처럼 썼지 만 데이터 구조를 매우 쉽게 대체하거나 단순히 submit 메소드의 큰 객체에 삽입 할 수 있습니다. – stevethecollier