2012-11-29 2 views
2

양식의 일부를 만들려고합니다.이 양식의 일부는 개체 목록을 반복하며 각 개체에 대해 사용자가 확인/특성을 선택 취소하십시오. 양식의 나머지 부분은 잘 작동하지만 확인란에 ng-model 속성을 설정하는 데 문제가 있습니다.ng-repeat가있는 폼에 고유 한 ng-form 태그를 만드는 방법

가 여기에 내가 가진 무엇 : 처음에는

나는 NG 모델 = 설정 시도 "app_access _을 {{object.id}}"나는 각 셀에 대한 고유 NG 모델을 것이다 있도록. 이로 인해 테이블 ​​행이 수십 번 반복되었습니다. 각 빈 셀에는 확인란이 있습니다. 주어진 시간에 각 개체 및 양식의 여러 개체에 대해 다섯 개의 확인란이 있습니다. 나는 컨트롤러의 각 체크 박스 (또는 체크 된 것들의 목록)에 액세스 할 수 있어야합니다.

+0

각도 요소를 사용하여 필드 요소 이름을 지정할 수 있다고 생각하지 않습니다. 이름에 각도 표현을 사용하는 https://groups.google.com/d/topic/angular/v5lK1y8-HXQ/discussion –

+0

을 참조하십시오. 문제를 일으키는 ng-model 속성 용으로 사용하는 것입니다. 나는 맥스의 대답이 올바른 방향으로 나를 가리킨다 고 생각한다. 나는 좀 더 실험해야 할 것이다. – akronymn

+0

제 경험상 불행하게도 항상 정상적으로 작동하지는 않습니다. 다음은 Angular 형식 검증과 함께 이름에 Angular 표현식을 사용할 때 문제를 보여주는 피들입니다. http://jsfiddle.net/mrajcok/teZKX/ 입력 요소를 검사하면 Angular 표현식이 평가되는 것처럼 보이지만 Angular validation stuff 그것을 인식하는 것 같지 않습니다. 이 경우는 작동하지 않으므로 개인적으로 양식 컨트롤에서 필드 이름에 각도 표현을 사용하지 않습니다. YMMV. 어쩌면 확인란과 함께 잘 작동합니다. BTW, 이름 속성은 Angular 체크 박스와 함께 선택 사항입니다. 필요하지 않을 수도 있습니다. –

답변

3

할 것 할 것 해당 항목/모델에 대한 새 (하위) 범위는 해당 내부 범위 내에서만 액세스 할 수 있기 때문에 항목에 대한 새 ng 모델 (새 범위에 연결됨)을 만들면 작동하지 않습니다. 우리는 내부/자식 범위에 액세스하는 컨트롤러 함수를 작성할 수 없습니다. 모델에 대한 myAppObjects (@ Max는 두 번째 예제에서 제안한 것과 같은)를 참조하는 것이 좋습니다. myAppObjects이 같은 보인다면

: 당신은 쓸 수

$scope.myAppObjects = [ 
    {id: 1, cb1: true, cb2: false, cb3: true, cb4: true, cb5: false }, 
    {id: 2, cb1: false, cb2: false, cb3: true, cb4: false, cb5: true }, 

같은 NG를 반복 :

<tr ng-repeat="appObj in myAppObjects"> 
    <td>{{appObj.id}} 
     <input type="checkbox" ng-model="appObj.cb1"></td> 
    <td><input type="checkbox" ng-model="appObj.cb2"></td> 
    <td><input type="checkbox" ng-model="appObj.cb3"></td> 
    <td><input type="checkbox" ng-model="appObj.cb4"></td> 
    <td><input type="checkbox" ng-model="appObj.cb5"></td> 
</tr> 

근무 바이올린 : http://jsfiddle.net/mrajcok/AvGKj/

결론 : 우리가 필요 체크 박스 모델은 부모 범위 (내 피들에 MyCtrl의 $ scope에 있음)에 정의되어 있으며 ngRepeat 내부/하위 범위에는 /에 없습니다.

+0

이것은 완전히 분명하게되었습니다! 감사합니다! – akronymn

0

일반적으로 ng-repeat을 사용하여 컬렉션을 반복하는 경우 표시 및 편집하는 항목은 컬렉션의 개별 멤버입니다. 당신이 ng-repeat에 의해 편집중인 문자열의 배열이있는 경우 ngRepeat가를 생성하기 때문에 그래서 당신은 당신이 반복되는 객체의 목록 인 경우

<div ng-repeat="item in list"> 
    <input ng-model="item" /> 
</div> 

또는 당신이

<div ng-repeat="obj in list"> 
    <input ng-model="obj.item" /> 
</div> 
+0

목록 배열의 항목이 프리미티브 (예 : 문자열 배열이 작동하지 않음) 인 경우 위의 첫 번째 예제 ("목록의 항목")는 작동하지 않습니다. 깨진 수 있습니다. http://stackoverflow.com/questions/12977894/what-is-the-angularjs-way-to-databind-many-inputs –

관련 문제