Reputation: 1118
I have a select box which is dynamically populated with ng-option
. I want it to display "Select one" by default. I used the following html hoping to achieve this.
<select id="productType" name="productType" class="col-lg-12 col-xs-12 form-control"
ng-model="context.product"
ng-options="product.value as product.name for product in data.products"
ng-change="loadAccessMethods()" required>
<option value="" disabled>Select one</option>
</select>
But this is what I see when I run the application.
Update : I am using Angular 1.6.5
Update : Vivz added a working code snippet with Angular 1.4.x in his answer. But it does not work with Angular 1.6.x. Can any one point out why this is broken in Angular 1.6.x ?
angular.module("App",[])
.controller("AppCtrl",function($scope){
$scope.context = {
product: '',
accessMethod: '',
workOrderNum: 0
};
$scope.data = {
products: [
{ name: 'ABC', value: '0', type: 't1' },
{ name: 'XYZ', value: '1', workflowType: 't2' }
]
};
});
<!DOCTYPE html>
<html ng-app="App">
<head>
<meta charset="utf-8" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<!-- <script data-require="[email protected]" data-semver="1.4.9" src="https://code.angularjs.org/1.4.9/angular.js"></script> -->
<script src=" https://opensource.keycdn.com/angularjs/1.6.5/angular.min.js "></script>
<script src="script.js"></script>
</head>
<body>
<div ng-controller="AppCtrl">
<select id="productType" name="productType" class="col-lg-12 col-xs-12 form-control"
ng-model="context.product"
ng-options="product.value as product.name for product in data.products"
ng-change="loadAccessMethods()" required>
<option value="" disabled>Select one</option>
</select>
</div>
</body>
</html>
Upvotes: 1
Views: 98
Reputation: 154
Use This Code It would solved your Problem
<select ng-model="context.product" ng-options="product.name for product in data.products">
<option value="" disabled>Select one</option>
</select>
Upvotes: 0
Reputation: 376
I think you are searching the solution like below run snippet and let me know if it's working for you
var app=angular.module("App",[]);
app.controller("AppCtrl",function($scope){
$scope.context = {
accessMethod: '',
workOrderNum: 0
};
$scope.data = {
products: [
{ name: 'ABC', value: '0', type: 't1' },
{ name: 'XYZ', value: '1', workflowType: 't2' }
]
};
$scope.loadAccessMethods = function() {
console.log($scope.context.product);
}
});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<!DOCTYPE html>
<html ng-app="App">
<head>
<meta charset="utf-8" />
<script data-require="[email protected]" data-semver="1.4.9" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular.min.js"></script>
<script src="script.js"></script>
</head>
<body>
<div ng-controller="AppCtrl">
<select id="productType" name="productType" class="col-lg-12 col-xs-12 form-control"
ng-model="context.product"
ng-options="product.value as product.name for product in data.products"
ng-change="loadAccessMethods()" required>
<option value="" ng-selected="true" ng-disabled="true">Select one</option>
</select>
</div>
</body>
</html>
I removed product from your
$scope.context = {
accessMethod: '',
workOrderNum: 0
};
and use ng-selected="true" ng-disabled="true"
for disable and select your value.
Upvotes: 0
Reputation: 3232
You can try a different approach like this:
var app = angular.module("App", []);
app.controller("AppCtrl", function($scope) {
$scope.context = {
product: '',
accessMethod: '',
workOrderNum: 0
};
$scope.data = {
products: [{
name: 'ABC',
value: '0',
type: 't1'
},
{
name: 'XYZ',
value: '1',
workflowType: 't2'
}
]
};
$scope.context.product1 = '';
});
<!DOCTYPE html>
<html ng-app="App">
<head>
<meta charset="utf-8" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<!-- <script data-require="[email protected]" data-semver="1.4.9" src="https://code.angularjs.org/1.4.9/angular.js"></script> -->
<script src=" https://opensource.keycdn.com/angularjs/1.6.5/angular.min.js "></script>
<script src="script.js"></script>
</head>
<body>
<div ng-controller="AppCtrl">
<h1> First Apporach</h1>
<select id="productType" name="productType" class="col-lg-12 col-xs-12 form-control" ng-model="context.product" ng-change="loadAccessMethods()" required>
<option value="" disabled>Select one</option>
<option ng-value="product.value" ng-repeat=" product in data.products">{{product.name}}</option>
</select>
<h2>Second approaach</h2>
<span ng-init="data.products.unshift({ name: 'Select one', value: ''});"></span>
<select id="productType" name="productType" class="col-lg-12 col-xs-12 form-control"
ng-model="context.product1"
ng-change="loadAccessMethods()" ng-options="product.value as product.name for product in data.products" required>
</select>
</div>
</body>
</html>
Upvotes: 1
Reputation: 6620
The above code of yours seems to work fine.
var app=angular.module("App",[]);
app.controller("AppCtrl",function($scope){
$scope.context = {
product: '',
accessMethod: '',
workOrderNum: 0
};
$scope.data = {
products: [
{ name: 'ABC', value: '0', type: 't1' },
{ name: 'XYZ', value: '1', workflowType: 't2' }
]
};
});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<!DOCTYPE html>
<html ng-app="App">
<head>
<meta charset="utf-8" />
<script data-require="[email protected]" data-semver="1.4.9" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular.min.js"></script>
<script src="script.js"></script>
</head>
<body>
<div ng-controller="AppCtrl">
<select id="productType" name="productType" class="col-lg-12 col-xs-12 form-control"
ng-model="context.product"
ng-options="product.value as product.name for product in data.products track by $index"
ng-change="loadAccessMethods()" required>
<option value="" disabled>Select one</option>
</select>
</div>
</body>
</html>
Upvotes: 1