ng-option을 사용하여 select 요소의 기본값을 설정하는 방법


148

: 나는 여기에 각도를 선택 지시어의 문서를 본 적이 http://docs.angularjs.org/api/ng.directive:select을 . 기본값을 설정하는 방법을 알 수 없습니다. 이것은 혼란 스럽습니다.

배열의 값 레이블로 선택

객체는 다음과 같습니다.

{
    "type": "select", 
    "name": "Service",
    "value": "Service 3", 
    "values": [ "Service 1", "Service 2", "Service 3", "Service 4"] 
}

HTML (작동 중) :

<select><option ng-repeat="value in prop.values">{{value}}</option></select>

그런 다음 select 요소 안에 ng-option 속성을 추가 prop.value하여 기본 옵션 으로 설정하려고합니다 (작동하지 않음).

ng-options="(prop.value) for v in prop.values"

내가 뭘 잘못하고 있죠?

답변:


131

따라서 해당 객체가 범위 내에 있다고 가정하면 :

<div ng-controller="MyCtrl">
  <select ng-model="prop.value" ng-options="v for v in prop.values">
  </select>
</div>

 

function MyCtrl($scope) {
  $scope.prop = {
    "type": "select", 
    "name": "Service",
    "value": "Service 3", 
    "values": [ "Service 1", "Service 2", "Service 3", "Service 4"] 
  };
}

플런저 작동 : http://plnkr.co/edit/wTRXZYEPrZJRizEltQ2g


2
알았어! 는 다시 감사를 ng-option바꿉니다<option ng-repeat="value in prop.values">{{value}}</option>
François Romain

2
이 작업을 수행하는 더 간단한 방법이 있어야합니다. 각도 js의 간단한 선택 기본값에는 매우 복잡합니다.
Edmund Rojas

1
ng-option 지시문은 구문이 다소 복잡하고 혼동됩니다. 객체를 바인딩 할 수있는 유연성으로 인해 약간 복잡해 졌다고 생각합니다. 내가 이것을 기억하려고하는 방법은 객체를 사용할 때마다 선택 컨트롤의 값 / 텍스트 속성에 사용할 속성을 명시 적으로 나타냅니다. 자세한 내용은 다음을 참조하십시오 : ozkary.com/2015/08/angularjs-ngoption-directive-simplified.html
ozkary 14

2
옵션을 쓰지 않고 뷰에서 선택을 만들고 하나를 선택하려면<select ng-model="limit" value="10" ng-options="v for v in [5,10,15,20,30,50]"></select>
asherrard

1
@james Kleeh .. 여기서 u는 첫 번째 옵션을 하드 코딩하고 있기 때문에 옵션을 모르는 경우 기본적으로 첫 번째 옵션을 표시하는 방법은 무엇입니까?
H Varma

69

그만큼 선택에 대한 각 문서 * 명시 적이 질문에 대답하지 않지만이있다. 를 보면 다음과 같이 script.js표시됩니다.

function MyCntrl($scope) {
  $scope.colors = [
    {name:'black', shade:'dark'},
    {name:'white', shade:'light'},
    {name:'red', shade:'dark'},
    {name:'blue', shade:'dark'},
    {name:'yellow', shade:'light'}
  ];
  $scope.color = $scope.colors[2]; // Default the color to red
}

이것은 HTML입니다.

<select ng-model="color" ng-options="c.name for c in colors"></select>

이것은 선택된 값을 기본값으로 설정하는 더 확실한 방법 인 것 같습니다. <select> withng-options . 레이블 / 값이 다른 경우에도 작동합니다.

* 이것은 Angular 1.2.7에서 온 것입니다.


이것은 나를 위해 일했습니다. 이것이 다시 나타날지 의심 스럽지만 누군가 이것을 발견하고 호환성에 대해 궁금한 경우를 대비하여 현재 AngularJS v1.2.27을 사용하고 있습니다.
Robert Cadmire

41

이 답변은 DB에서 데이터를 가져오고 수정 한 다음 변경 사항을 유지할 때 더 유용합니다.

 <select  ng-options="opt.id as opt.name for opt in users" ng-model="selectedUser"></select>

여기 예를 확인하십시오.

http://plnkr.co/edit/HrT5vUMJOtP9esGngbIV


마지막으로 여기에 실무 답변이 있습니다! 또한이 솔루션을 사용하면 정의되지 않은 옵션을 올바르게 작동시킬 수 있습니다. <option value = ""> 선택하십시오 </ option>
DDD

이 게시물이 존재하기 때문에 기쁘고 해결책을 찾기 위해 잠시 동안 검색 했으며이 문제가 해결되었습니다.
slee423

22
<select name='partyid' id="partyid" class='span3'>
<option value=''>Select Party</option>
<option ng-repeat="item in partyName" value="{{item._id}}" ng-selected="obj.partyname == item.partyname">{{item.partyname}}
</option>
</select>

5
나쁜 습관이 있습니다 ... 두 번째 노란색 메모를 살펴보십시오 : docs.angularjs.org/api/ng/directive/select .
M'sieur Toph '10

이것은 작동하지 않을 것입니다, 예. 레코드를 편집하려고하면 레코드가 필드와 어떻게 바인딩됩니까?
windmaomao

21

객체 배열이 다음과 같이 복잡한 경우 :

$scope.friends = [{ name: John , uuid: 1234}, {name: Joe, uuid, 5678}];

그리고 현재 모델은 다음과 같이 설정되었습니다.

$scope.user.friend = {name:John, uuid: 1234};

track byng-model = "user.friend"에도 uuid가있는 한 uuid (또는 고유 필드) 에서 함수 를 사용하는 데 도움이되었습니다 .

<select ng-model="user.friend" 
ng-options="friend as friend.name for friend in friends track by friend.uuid"> 
</select>

이 대답은 나의 하루를 만들었다! 또한이 문서에서 추적 내용을 살펴보십시오. docs.angularjs.org/api/ng/directive/ngOptions
Arashsoft

이것이 가장 좋은 답변입니다!
Gerfried

10

몇 시간 동안이 문제로 어려움을 겪었으므로 여기에 언급 된 모든 예제는 서비스 또는 데이터베이스에서 오는 것이 아니라 스크립트 자체에서 데이터가로드 된 경우를 나타냅니다. 저는 저와 같은 문제가있는 사람에게 경험을 제공하고 싶습니다.

일반적으로 데이터베이스에 원하는 옵션의 ID 만 저장하므로 표시하겠습니다.

service.js

myApp.factory('Models', function($http) {
var models = {};
models.allModels = function(options) {
    return $http.post(url_service, {options: options});
};

return models;
});

controller.js

myApp.controller('exampleController', function($scope, Models) {
$scope.mainObj={id_main: 1, id_model: 101};
$scope.selected_model = $scope.mainObj.id_model;
Models.allModels({}).success(function(data) {
    $scope.models = data; 
});
});

마지막으로 부분 html model.html

Model: <select ng-model="selected_model" 
ng-options="model.id_model as model.name for model in models" ></select>

기본적으로 모델 " model.id_model " 에서 모델의 모델에 대한 model.name으로 " model.id_model "이라는 부분을 가리키고 싶었습니다 . " model.id_model "은 모델의 id를 값으로 사용하므로 " mainObj.id_model " " selected_model ", 이는 일반 값일 뿐이며 " as model.name "은 리피터의 레이블이며 마지막으로 모델의 " 모델 "은 우리 모두가 알고있는 규칙적인주기입니다.

이것이 누군가에게 도움이되기를 바랍니다. 그렇다면 투표하십시오 : D


1
당신은 바인드에 선택할 수 있습니다 mainObj.id_model직접 ( ng-model="mainObj.id_model"오히려 '자리 / 일반 값'변수를 사용하는 대신)selected_model
drzaus

예, 실제로 $ scope 내에서 직접 값으로 수행 할 수 있음을 보여주고 싶었지만 지적 해 주셔서 감사합니다.
Wiston Coronell

int뿐만 아니라 객체에 바인딩 할 수 있습니까? 내 {id : 24}를 내 [{id : 23}, {id : 24}, {id : 25}]에 바인딩하는 방법을 모르기 때문에 선택한 항목을 설정하기 위해 nG 옵션을 가져올 수 없습니다.
Victorio Berra

당신은 위치를 얻기 위해 항상 $ index를 사용할 수 있습니다. 그러나 예, 객체에 바인딩하는 것이 가능합니다
Wiston Coronell

10
<select id="itemDescFormId" name="itemDescFormId" size="1" ng-model="prop" ng-change="update()">
    <option value="">English(EN)</option>
    <option value="23">Corsican(CO)</option>
    <option value="43">French(FR)</option>
    <option value="16">German(GR)</option>

빈 값으로 옵션을 추가하십시오. 작동합니다.

데모 Plnkr


정말 당신이 좋아하는 무언가를 추가하는 경우 작동<option value="" disabled>Please Select</option>
fWd82

9

더 쉬운 방법은 다음 과 같이 data-ng-init 를 사용하는 것입니다 .

<select data-ng-init="somethingHere = options[0]" data-ng-model="somethingHere" data-ng-options="option.name for option in options"></select>

여기서 가장 큰 차이점은 포함해야한다는 것입니다 data-ng-model


3
문서에 지정된대로 : 아래 데모에서 볼 수 있듯이 ngInit의 적절한 사용은 ngRepeat의 특수 속성에 대한 별칭을 지정하는 것입니다. 이 경우 이외에도 범위에서 값을 초기화하려면 ngInit 대신 컨트롤러를 사용해야합니다.
user12121234

1
ng-options를 사용하여 게시 한 방식이 훨씬 쉽고 구체적입니다. 두 가지 방법 모두 작동합니다.
Wyetro

3

NG 모델 속성은 선택 옵션을 설정하고 또한 파이프와 같은 필터를 허용 해 orderBy을 : orderModel.value를

index.html

<select ng-model="orderModel" ng-options="option.name for option in orderOptions"></select>

controllers.js

$scope.orderOptions = [
    {"name":"Newest","value":"age"},
    {"name":"Alphabetical","value":"name"}
];

$scope.orderModel = $scope.orderOptions[0];

1
이것을 시도하고 참조하십시오 angular.js:117 TypeError: a.forEach is not a function. 이견있는 사람?
carmenism

1

Chrome, IE 10/11, Firefox의 페이지에서 때때로 기본값으로 채워지지 않는 사람이 있으면 HTML에서 채워진 변수를 확인하기 위해 입력 / 선택 필드에이 속성을 추가하여 다음과 같이하십시오.

<input data-ng-model="vm.x" data-ng-if="vm.x !== '' && vm.x !== undefined && vm.x !== null" />

0

숫자 ID로 옵션을 색인화하지 않아도되는 경우 매우 간단합니다.

  1. $ scope var-people array 선언

    $scope.people= ["", "YOU", "ME"];
  2. 위 범위의 DOM에서 객체를 만듭니다.

    <select ng-model="hired" ng-options = "who for who in people"></select>
  3. 컨트롤러에서 ng-model을 "hired"로 설정하십시오.

    $scope.hired = "ME";

행운을 빕니다!!! 정말 쉽습니다!


0

간단히 말해서, 나는 이런 식으로했습니다.

 <select class="form-control" data-ng-model="itemSelect" ng-change="selectedTemplate(itemSelect)" autofocus>
        <option value="undefined" [selected]="itemSelect.Name == undefined" disabled="disabled">Select template...</option>
        <option ng-repeat="itemSelect in templateLists" value="{{itemSelect.ID}}">{{itemSelect.Name}}</option></select>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.