2017-12-29 34 views
0

내 문제에 대한 해결책을 찾았지만 정답을 찾을 수 없었습니다.
나는 의 목록을 가지고 있으며 개의 질문과 의 목록이 개로 선택되었습니다. 모든 질문 목록에서 체크 박스 목록을 작성하고 선택한 질문 목록에있는 체크 박스를 선택해야합니다. 체크 박스가 변경되면 그에 맞게 업데이트하기 위해 선택된 질문 목록이 필요합니다. 모든 질문 목록이 변경되지 않습니다. 이것을 어떻게 할 수 있습니까? 내 응용 프로그램에서AngularJs - 선택한 개체의 목록을 모든 개체의 목록에 바인딩하여 확인란 선택

 var MyApp = angular.module('MyApp', []); 
 

 
     MyApp.controller('MyController', ['$scope', function ($scope) { 
 

 
      $scope.allQuestions = [ 
 
       { q_id: 1, q_txt: 'What time is it?', q_sort: 1}, 
 
       { q_id: 2, q_txt: 'What is that?', q_sort: 2}, 
 
       { q_id: 3, q_txt: 'Who are you?', q_sort: 4}, 
 
       { q_id: 4, q_txt: 'What color is that?', q_sort: 3} 
 
      ]; 
 

 
      $scope.selectedQuestions = [ 
 
       { q_id: 1, other_prop: 'yyy' }, 
 
       { q_id: 4, other_prop: 'zzz' }, 
 
      ]; 
 
     }]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="MyApp" ng-controller="MyController"> 
 

 
     <div ng-repeat="question in allQuestions"><input type="checkbox" ng-model="x" /> {{ question.q_txt }}</div> 
 

 
    </div>

이 목록을 서버에서 와서 나는 다시 개체로 선택한 질문의 목록을 반환 할 수 있도록하고 싶습니다 : 여기 내 상황은 매우 축약 된 버전입니다 변경 사항을 저장할 때 서버. 이 작업을 수행하기위한 바인딩이나 올바른 체크 박스를 확인하는 방법을 알아낼 수 없습니다. 두리스트는 다르지만, 일치하는 q_id 값을 가지고 있습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

0

사용자가 양식을 제출할 때까지 어떤 질문을 선택해야할지 걱정할 필요가없는 것처럼 들리므로 그 순간 모든 질문 목록을 반복하고 선택한 질문의 배열을 만듭니다. 이 같은

뭔가 :

function getSelections() { 
    var selectedQuestions = [] 
    $scope.allQuestions.forEach(function(question) { 
     if (question.selected) { 
      var questionCopy = angular.copy(question) 
      selectedQuestions.push(questionCopy) 
     } 
    }) 
    return selectedQuestions 
} 

그런 다음 당신이 게시하기 전에이 함수를 호출하고 API에 결과를 전달합니다.

당신은으로 미리 선택해야하는 확인란을 미리 선택 처리하기 위해 NG 모델을 사용할 수 있어야합니다 :이 같은

<div ng-repeat="question in allQuestions"><input type="checkbox" ng-model="question.selected" /> {{ question.q_txt }}</div> 
+0

감사합니다. Mike. 당신은 맞습니다, 제출 부분은 쉬운 부분입니다. 내 주요 관심사는 데이터베이스에서 선택한 질문에 대한 확인란을 미리 선택하는 방법입니다. – cheluto2

+0

아, 그리워. 내 편집을 참조하십시오. –

+0

코드를 편집했습니다. 테스트하는 동안 "selected"속성을 추가하고 게시하기 전에 제거하지 않았습니다. 모든 질문 목록에는 시스템에서 사용할 수있는 모든 질문 목록이 있으므로 해당 질문은 없습니다. selectedQuestions 목록은 선택된 항목을 나타냅니다. 죄송합니다. – cheluto2

0

뭔가 트릭을 할해야합니다. array.find()를 사용하는 것이 더 효율적일 수 있습니다. _과 같은 라이브러리를 사용하면 더 쉽게 사용할 수 있습니다.

$scope.selectedQuestions.map(function(selectedQuestion) { 
     var match = $scope.allQuestions.some(function(question) { 
      if (question.q_id == selectedQuestion.q_id) { 
       question.selected = true 
       return true 
      } 
      return false 
     } 
    }