간단한 배열 초기화를 가진 ng-options


187

Angular 및와 약간 혼동됩니다 ng-options.

간단한 배열이 있고 선택을 초기화하고 싶습니다. 그러나 그 옵션 값 = 레이블을 원합니다.

script.js

$scope.options = ['var1', 'var2', 'var3'];

html

<select ng-model="myselect" ng-options="o for o in options"></select>

내가 얻는 것 :

<option value="0">var1</option>
<option value="1">var2</option>
<option value="2">var3</option>

내가 원하는 것 :

<option value="var1">var1</option>
<option value="var2">var2</option>
<option value="var3">var3</option>

그래서 나는 시도했다 :

<select ng-model="myselect2" ng-init=0 ng-options="options[k] as v for (k,v) in options"></select>

<select ng-model="myselect3" ng-init=0 ng-options="b as b for b in options"></select>

(그러나 작동하지 않았습니다.)

편집하다:

내 양식이 외부에서 제출되므로 0 대신 값으로 'var1'이 필요합니다.

답변:


304

당신은 실제로 세 번째 시도에서 맞았습니다.

 <select ng-model="myselect" ng-options="o as o for o in options"></select>

실제 예제를 참조하십시오 : http://plnkr.co/edit/xEERH2zDQ5mPXt9qCl6k?p=preview

비결은 AngularJS가 키를 0에서 n까지의 숫자로 쓰고 모델을 업데이트 할 때 다시 변환한다는 것입니다.

결과적으로 HTML은 올바르지 않게 보이지만 값을 선택할 때 모델이 여전히 올바르게 설정됩니다. (즉, AngularJS는 '0'을 'var1'로 다시 변환합니다)

Epokk의 솔루션도 작동하지만 데이터를 비동기식으로로드하는 경우 항상 올바르게 업데이트되지 않을 수 있습니다. 범위가 변경되면 ngOptions를 사용하면 올바르게 새로 고쳐집니다.


1
당신은 주제에서 벗어났습니다. 지침을 이해하지 못했습니다. 그는 value그의 것을 원한다 select.
EpokK

10
나는 지침을 이해했지만 그의 의도는 '값'을 모델에 바인딩하는 것이며 AngularJs가 태그를 렌더링하는 방식으로 인해 발생하는 일을 오해하고 있습니다.
James Davies

3
각도로 select의 값을 얻는 경우 작동하지만 내 경우 (예 : 클래식 제출 양식) 값은 var1, var2, var3이 아닌 0,1,2,3입니다.
Dragu

1
모델에 바인딩한다고 가정했지만 AngularJS를 사용하여 외부로 제출 된 양식을 렌더링하기 위해 EpokK의 솔루션을 사용하는 경우.
James Davies

66
그것은 단지 나입니까, 아니면 가장 까다 롭고 불분명 한 구문입니까?
fool4jesus

35

다음 ng-repeatoption같이 사용할 수 있습니다 .

<form>
    <select ng-model="yourSelect" 
        ng-options="option as option for option in ['var1', 'var2', 'var3']"
        ng-init="yourSelect='var1'"></select>
    <input type="hidden" name="yourSelect" value="{{yourSelect}}" />
</form>

제출하면 form입력 값을 숨길 수 있습니다.


DEMO

선택된 ng- 반복


내 대답을 줄인 경우 새 솔루션을 확인하십시오.
EpokK

21

당신은 같은 것을 사용할 수 있습니다

<select ng-model="myselect">
    <option ng-repeat="o in options" ng-selected="{{o==myselect}}" value="{{o}}">
        {{o}}
    </option>
</select>

ng-selected를 사용하면 myselect가 미리 채워진 경우 옵션을 미리 선택합니다.

ng-options는 배열에서만 작동하기 때문에 어쨌든 ng-options 보다이 방법을 선호합니다. ng-repeat는 json 같은 객체에서도 작동합니다.


1
ng-options객체 데이터 소스와도 작동합니다. docs.angularjs.org/api/ng/directive/select
Charlie Schliesser

1
다른 사람들이 해결 방법을 제시했지만이 해결 방법은 가장 우아하고 오래된 HTML 스타일과 비슷하며 각도 모델 바인딩 및 양식 제출과 함께 작동합니다. 감사!
Fadi Chamieh

4
ng-selected는 각도 지시문이므로 핸들 바가 필요하지 않습니다. 탁월한 솔루션.
Kasey Speakman

20

다음과 같이 선택하십시오 :

<select ng-model="myselect" ng-options="b for b in options track by b"></select>

당신은 얻을 것이다 :

<option value="var1">var1</option>
<option value="var2">var2</option>
<option value="var3">var3</option>

일 바이올린 : http://jsfiddle.net/x8kCZ/15/


1
이 솔루션은 문자열 배열에서 초기 값을 선택하는 데 도움이 된 유일한 솔루션이었습니다.
Ena

예, 이것이 답이되어야합니다. 트랙은 저를위한 마술입니다.
Gurnard

나는 위의 해결책을 따른 후에는 거의 기대하지 않았지만 이것은 쉬운 방법이었습니다.
sac Dahal

10
<select ng-model="option" ng-options="o for o in options">

$ scope.option은 변경 후 'var1'과 같으며 생성 된 HTML에 value = "0"이 표시됩니다.

플 런커

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.