2014-12-10 4 views
1

배열이 'players'이고 각 플레이어의 이름, 점수 및 기타 속성이 있습니다.

<select ng-model="personToAsk"> 
    <option value=''>Select who you want to ask</option> 
    <option ng-repeat="p in players" value="{{$index}}">{{p.name}} ({{p.score}} points)</option> 
</select> 
<p>Selected player: {{selectedPerson.name}} 

그리고 내 컨트롤러 :

나는 내 부분에 다음이

$scope.selectedPerson = $scope.players[$scope.personToAsk]; 

그러나 {{selectedPerson.name}} 아무것도 출력되지 않습니다.

내 선수 배열의 색인을 하드 코드하면 ($scope.selectedPerson = $scope.players[0];) 사람을 출력하지만 어떻게 동적으로 되나요? 플레이어가 드롭 다운에서 선택되면 이름이 아래로 만 표시됩니다.

내 템플릿에 {{personToAsk}}을 입력하면 숫자가 출력됩니다.

+1

1) 오히려 $ scope.selectedPerson = $ scope.personToAsk 여야합니다. 2) (이벤트에 응답하여) 올바른 장소에서이 임무를 수행 했습니까? –

+0

1) $ scope.personToAsk는 선택한 옵션의 $ 인덱스이므로, 해당 숫자를 사용하여 플레이어 배열을 검색합니다. 2) 역동적 인 바인딩이 모든 일을 처리 할 수 ​​있기를 기대했지만 AngularJS에 처음 왔으므로 분명히 그것이 어떻게 작동하는지 오해했습니다. – coopersita

답변

2

모두 엉망으로 보입니다. 예를 들어 어떤 변수 '인덱스'가 무엇인지 모르겠다.

선택 항목의 옵션을 생성하려면 ngOptions를 사용해야합니다.

당신이 컨트롤러에이 있다고 가정 해 봅시다 :보기에 그런

$scope.personToAsk = {};  
$scope.players = [ 
    { id: 1, name: 'John', score: 10}, 
    { id: 2, name: 'George', score: 15}, 
    { id: 3, name: 'James', score: 4} 
]; 

, 그냥 쓰기 :

<select ng-model="personToAsk" 
    ng-options="p as (p.name + ' ' + p.score) for p in players"> 
</select> 
<p>Selected player: {{personToAsk.name}}</p> 

jsfiddle 예 : http://jsfiddle.net/JoeSham/HB7LU/9008/

+0

문제는 각 옵션에 이름을 표시하고 "John (score : 10)"점수를 얻으려는 것입니다. 솔루션에서 옵션에는 이름 만 표시됩니다. 형식을 지정하는 ng-option이있는 방법이 있습니까? – coopersita

+0

내 솔루션에는 점수도 표시됩니다. 이것은 옵션에 표시되는 내용을 지정하는 부분입니다 (p.name + ''+ p.score). 필요에 따라 수정할 수 있으므로 원하는 형식으로 변경하십시오. (p.name + '(score :'+ p.score + ')') –

+0

고마워요! 그것은 완벽하게 작동했습니다! – coopersita

3

문 :

$scope.selectedPerson = $scope.players[$scope.personToAsk]; 

초기화 할 때 한 번 실행됩니다. 그리고 그 당시에는 $ scope.personToAsk에 아무런 가치가 없습니다.

따라서이 문은 선택 드롭 다운의 값이 변경 될 때 실행되어야합니다. "personToAsk"에서 시계를 만들거나 select에서 변경을 할 수 있습니다. 그리고이 문장을 거기에서 실행하십시오. 작동합니다 :)

시계 예 :

$scope.$watch('personToAsk'), function() { 
    $scope.selectedPerson = $scope.players[$scope.personToAsk] ; 
} 

NG 변화 예 : 컨트롤러에서

<select ng-model="personToAsk" ng-change="selectPerson()"> <option value=''>Select who you want to ask</option> <option ng-repeat="p in players" value="{{$index}}"> {{p.name}} ({{p.score}} points) </option> </select>

는 :

$scope.selectPerson = fucntion() { 
    $scope.selectedPerson = $scope.players[$scope.personToAsk]; 
} 

는 모두 작동합니다 :)

개인적으로 ng-options 지시어를 사용하여 옵션을 렌더링하는 것을 선호합니다.

+0

또한 ng-option을 사용하고 싶었습니다. 원하는대로 옵션에서 결과를 얻는 방법을 찾지 못했습니다. "John (score : 10)". – coopersita

관련 문제