2013-03-23 5 views
0

저는 AngularJS를 배우고 있으며 선택 요소에 대한 데이터 바인딩과 관련하여 질문이 있습니다. 텍스트 박스를위한 데이터 바인딩은 어떤 종류의 이벤트 핸들링 코드 없이도 작동합니다. ng-model 속성이 설정되면 모델 속성이 변경 될 때 textbox가 업데이트되고 그 반대의 경우도 마찬가지입니다. ng-change 속성은 필요 없습니다.AngularJS 일치하지 않는 데이터 바인딩

그러나 select 요소의 경우 ng-change atribute를 통해 호출 할 함수를 작성해야합니다.

왜 angularjs는 텍스트 상자의 ng-change 속성없이 데이터 바인딩을 처리하지만 select 요소에 대한 ng-change 속성을 통해 호출되는 함수가 필요합니까?

업데이트 : 덧글 섹션에 바이올린을 추가했습니다. 이 예제는 AngularJS in Action 책에서 발췌 한 것입니다. 이야기 중 하나를 클릭하고 텍스트 상자 값을 변경하면 모델이 업데이트됩니다. 드롭 다운 모델의 선택 사항이 변경되지 않습니다.

업데이트 : 댓글에 새로운 바이올린을 추가했습니다.

감사합니다.

+0

을 전달합니다 간단한 문자열 상태를 사용하는 비트 like this one을 단순화 할 수 있다고 생각 하드 코딩 된 '

+0

http : //jsfiddle.net/a5SUS/32/ – Alper

+0

브라우저 콘솔을 사용하면'typesIndex is is incorrect 하나의 함수에서 사용하지만 아무데도 정의되지 않았습니다. – charlietfl

답변

1

작동하는 바이올린을 만들었습니다 here - 문제는 실제로 여기에있는 더미 데이터입니다. 최초의 피들에서는 {name : 'Back Log'}와 {name : 'To Do'}의 statuses 배열에 만들어진 객체는 {name : 'Back Log'}와 같지 않습니다. 및 {name : '할 일'} 더미 스토리 객체에서 생성 된 객체가 있습니다.

예제가 작동하도록하기 위해 인덱싱 된 상태를 getStories 함수에 전달합니다. 그러나 이것은 데모로 인한 혼란의 사례 일뿐입니다. (나뿐만 아니라 행동의 각도에 대한 MEAP보고 있었고, 나는 당신이 충전되는 === 테스트

var getStories = function(statusesIndex) { 
    var tempArray = [ 
     {title:'Story 00', 
     description:'Description pending.', 
     status: statusesIndex['To Do'] 
     }, 
     {title:'Story 01', 
     description:'Description pending.', 
     status: statusesIndex['Back Log'] 
     } 
]; 
    return tempArray; 
} 
0

내가 정확하게 질문을 이해한다면 선택 상자에서 선택한 옵션을 가져 오기 위해 변경 이벤트를 호출 할 필요가 없기 때문에 추측이 잘못되었다고 생각합니다.

<select ng-model='select'> 
    <option>....</option> 
    <option value='one'>One</option> 
    <option value='Two'>Two</option> 
</select> 

// Your selected option will print below... without invoking ng-change 
<div>You selected: {{select}}</div> 

데모 : http://jsfiddle.net/jenxu/1/

+0

선택한 옵션을 변경하면 변경 사항이 모델에 반영되지 않습니다. – Alper

+0

답변에 @Alper 데모가 작동합니다. 자신의 데모를 만들어 문제를 재현하십시오. – charlietfl

+0

@charlietfl 데모가 생성되었습니다. – Alper

1

나는 당신의 혼란이 select documentation가 여전히 올바르지되는 결과가 될 것 같아요. (내 Disqus comment을 참조하십시오. ng-modelselect과 함께 사용할 수 있으며 사용해야합니다. ng-change은 선택 사항이며, 선택한 옵션이 변경 될 때마다 무언가를하고 싶다면 훅을 제공합니다.

일반적으로 선택시 ng-options을 사용해야합니다.

+0

변경하지 않고 양방향 바인딩을 사용할 수 없습니다. 위의 내 의견과 관련 바이올린을 참조하십시오. – Alper

관련 문제