AngularJs-SELECT의 ng-model
문제:
내 페이지에 ng-repeat
. 또한 ng-model
기본값이있는가 있습니다.
값을 변경하면 ng-model
적응합니다. 괜찮습니다. 그러나 드롭 다운 목록은 시작할 때 빈 슬롯을 표시하며 대신 기본값이 선택된 항목이 있어야합니다.
암호
<div ng-app ng-controller="myCtrl">
<select class="form-control" ng-change="unitChanged()" ng-model="data.unit">
<option ng-repeat="item in units" ng-value="item.id">{{item.label}}</option>
</select>
</div>
JS 사용 :
function myCtrl ($scope) {
$scope.units = [
{'id': 10, 'label': 'test1'},
{'id': 27, 'label': 'test2'},
{'id': 39, 'label': 'test3'},
]
$scope.data = {
'id': 1,
'unit': 27
}
};
옵션 요소에 대해 ng-selected 지시문을 사용할 수 있습니다 . 진실하면 선택된 속성을 설정한다는 표현이 필요합니다.
이 경우 :
<option ng-selected="data.unit == item.id"
ng-repeat="item in units"
ng-value="item.id">{{item.label}}</option>
데모
angular.module("app",[]).controller("myCtrl",function($scope) {
$scope.units = [
{'id': 10, 'label': 'test1'},
{'id': 27, 'label': 'test2'},
{'id': 39, 'label': 'test3'},
]
$scope.data = {
'id': 1,
'unit': 27
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="myCtrl">
<select class="form-control" ng-change="unitChanged()" ng-model="data.unit">
<option ng-selected="data.unit == item.id" ng-repeat="item in units" ng-value="item.id">{{item.label}}</option>
</select>
</div>
다음 코드를 시도하십시오.
컨트롤러에서 :
function myCtrl ($scope) {
$scope.units = [
{'id': 10, 'label': 'test1'},
{'id': 27, 'label': 'test2'},
{'id': 39, 'label': 'test3'},
];
$scope.data= $scope.units[0]; // Set by default the value "test1"
};
페이지에서 :
<select ng-model="data" ng-options="opt as opt.label for opt in units ">
</select>
옵션 태그를 정의 할 필요가 없습니다. ngOptions 지시문을 사용하여이를 수행 할 수 있습니다. https://docs.angularjs.org/api/ng/directive/ngOptions
<select class="form-control" ng-change="unitChanged()" ng-model="data.unit" ng-options="unit.id as unit.label for unit in units"></select>
However, ngOptions provides some benefits such as reducing memory and increasing speed by not creating a new scope for each repeated instance. angular docs
Alternative solution is use ng-init
directive. You can specify function that will be initialize your default data.
$scope.init = function(){
angular.forEach($scope.units, function(item){
if(item.id === $scope.data.unit){
$scope.data.unit = item;
}
});
}
See jsfiddle
You can also put the item with the default value selected out of the ng-repeat like follow :
<div ng-app="app" ng-controller="myCtrl">
<select class="form-control" ng-change="unitChanged()" ng-model="data.unit">
<option value="yourDefaultValue">Default one</option>
<option ng-selected="data.unit == item.id" ng-repeat="item in units" ng-value="item.id">{{item.label}}</option>
</select>
</div>
and don't forget the value atribute if you leave it blank you will have the same issue.
Select's default value should be one of its value in the list. In order to load the select with default value you can use ng-options. A scope variable need to be set in the controller and that variable is assigned as ng-model in HTML's select tag.
View this plunker for any references:
http://embed.plnkr.co/hQiYqaQXrtpxQ96gcZhq/preview
ReferenceURL : https://stackoverflow.com/questions/30048605/angularjs-ng-model-in-a-select
'IT Share you' 카테고리의 다른 글
Android Studio에서 Facebook 라이브러리 가져 오기 : 'ANDROID_BUILD_SDK_VERSION'속성을 찾을 수 없습니다. (0) | 2021.01.07 |
---|---|
함수가 호출되지 않았는지 어떻게 테스트 할 수 있습니까? (0) | 2021.01.07 |
'x << ~ y'는 JavaScript에서 무엇을 나타 냅니까? (0) | 2021.01.07 |
Python의 argparse에서 동일한 옵션을 여러 번 사용 (0) | 2021.01.07 |
소품 변경시 React 컴포넌트 다시 렌더링 (0) | 2021.01.07 |