- SPLessons

how to use ng-option to set default val...

SPLessons 5 Steps, 3 Clicks
5 Steps - 3 Clicks

how to use ng-option to set default value of select element

how to use ng-option to set default value of select element

Today we will see how to set the default value of select element in AngularJS ng-option.  We can use the ngRepeat on  “<option>” elements instead of ngOptions to achieve a similar result. But ngOptions  will provide some benefits such as reducing the memory and increasing speed by not creating a new scope for each repeated instance.


Quick Solution

<!-- app.js -->

  $scope.degrees = [
                      {"degree_code":"GB","degree_name":"Bachelor of Science"},
                      {"degree_code":"GR","degree_name":"Non Degree Undergraduate"}
 $scope.selecteddegree = {degree_code:"GB"};
<!-- html -->
 <select name="degree" class="form-control" ng-model="selecteddegree" ng-options="degree.degree_name for degree in degrees track by degree.degree_code" >
           <option value=""> Select Degree </option>


  • Here we have JSON object with (key,value) pair format and named as degrees.
  • We will use ng-options to bind the “<option > ” element of select element with JSON object “degrees” data.
  • We have passed an expression in ng-options “degree.degree_name for degree in degrees track by degree.degree_code”
  • degree.degree_name – degree is variable name and on each repeat the row data for JSON object will copied to degree variable.
    • First repeat the degree contains : ” {“degree_code”:”GB”,”degree_name”:”Bachelor of Science”} “.
    • If want to get the name of degree we can simple use ” degree.degree_name”
    • If want to get the code of degree we can simple use “degree.degree_code”
    • Second repeat the degree contains : ” {“degree_code”:”GR”,”degree_name”:”Non Degree Undergraduate”} “
  • So this “degree.degree_name”  goes to display text of the select element.
  • degree in degrees – we are specifying copy each row from degrees JSON object to degree variable on each repeat.
  • track by degree.degree_code – here I would like to set the option element value attribute with my degree_code.
    • <option value=”GB”>
    • <option value=”GR”>
  • If you don’t specify the track by expression then ng-option will set the index of the JSON object. Like bellow.
    • <option value=”0″>
    • <option value=”1″>
    • <option value=”2″>
  • By default ng-options will set the selected value is 0 indexed value.
  • If you want to set the different value as default value then you have to specify manually with the help of ng-model directive.
  • We have bind the select element with ng-model and named as selecteddegree.
  • Now we can easily set the custom selected element value from our controller.
    • $scope.selecteddegree = {degree_code:”GB”};
    • $scope.selecteddegree = {degree_name:”Bachelor of Science”}; – it will not work
    • Because we set the “<option value=”GB”>” by using track by expression so it will ng-option will search for Bachelor of Science in option value.



Project File Structure 

+ index.html
+ app.js


 * Created by sinukoll on 4/15/15.
'use strict';
var splessonsApp = angular.module('splessonsApp',[]);

  // working with ng-options with Array data
  $scope.degreesarray = ["GB","GR"];
  $scope.selecteddegreeobjectarray = "GB";

  // working with ng-options with Json data
  $scope.degreesobject = [
                      {"degree_code":"GB","degree_name":"Bachelor of Science"},
                      {"degree_code":"GR","degree_name":"Non Degree Undergraduate"}
  $scope.selecteddegreeobject = {degree_code:"GB"};


<!DOCTYPE html>
<html ng-app="splessonsApp">
  <head lang="en">
      <meta charset="utf-8">
      <link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet" type="text/css">
  <body ng-controller="splessonsController">
    <div class="container"> 

    <div class="jumbotron">

    <h3> <a href="https://www.splessons.com/2015/05/angularjs-value-attribute-for-select/" > SPLessons.com </a> </h3>

    <form class="form-horizontal">
      <div class="form-group">
        <label for="inputEmail3" class="col-sm-2 control-label">Degrees in Array: </label>
        <div class="col-sm-10">
          <select name="degreeinagrray" class="form-control" ng-model="selecteddegreeobjectarray" ng-options="degree for degree in degreesarray" >
           <option value=""> Select Degree </option>

      <div class="form-group">
        <label for="inputEmail3" class="col-sm-2 control-label">Degree in Object: </label>
        <div class="col-sm-10">
          <select name="selecteddegreeobject" class="form-control" ng-model="selecteddegreeobject" ng-options="degree.degree_name for degree in degreesobject track by degree.degree_code" >
           <option value=""> Select Degree </option>


    <p> Selected value in Array : {{selecteddegreeobjectarray}}</p>
    <p> Selected value in Object : {{selecteddegreeobject.degree_name}}</p>


    <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min.js" type="text/javascript" ></script>
    <script src="app.js" type="text/javascript"></script>