0

So I have angular code like this

<select class="form-control" ng-model="ctrl.selectedProvider">
    <option value="">Please select a provider</option>
    <option ng-repeat="provider in ctrl.providers" ng-value={{provider.id}}>
        {{provider.description}}
    </option>
</select>

The data is like this

providers = [{
     id: 1,
     description: provider1
},{
     id: 2,
     description: provider2
}]

If there's only have one element in ctrl.providers, I want to set the default value of the select tag to this provider. Otherwise, I want to keep it to "Please select a provider" and let the user select the provider he wants. I have googled that and found ng-init, but I think it's not useful for my case. Any ideas? Thanks

Paul
  • 13
  • 3

2 Answers2

0

Use ng-options to create the <option> tags and check data length to assign model if applicable

angular.module('app', [])
  .controller('MainCtrl', function() {

    this.providers = [{
      id: 2,
      description: 'provider2'
    }];

    if (this.providers.length === 1) {
      this.selectedProvider = this.providers[0]
    }
  })
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.5/angular.js"></script>
<div ng-app="app" ng-controller="MainCtrl as ctrl">

  <select class="form-control" 
          ng-model="ctrl.selectedProvider" 
          ng-options="o.id as o.description for o in ctrl.providers track by o.id">
    <option value="">Please select a provider</option>        
  </select>

</div>
charlietfl
  • 170,828
  • 13
  • 121
  • 150
0

I think what you have will work, just need to adjust your code a little: (Example below)

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  var ctrl = this;
  // Uncomment to see result
  //ctrl.selectedProvider = null;
  //ctrl.selectedProvider = "";
  ctrl.selectedProvider = 1;
  //ctrl.selectedProvider = 2;
  
  ctrl.providers = [{
     id: 1,
     description: "provider1"
  },{
     id: 2,
     description: "provider2"
  }];
});
<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.5.x" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.11/angular.min.js" data-semver="1.5.11"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl as ctrl">
     <select class="form-control" ng-model="ctrl.selectedProvider">
      <option value="">Please select a provider</option>
      <option ng-repeat="provider in ctrl.providers" ng-value={{provider.id}}>
          {{provider.description}}
      </option>
    </select>
  </body>
</html>
Matt
  • 22
  • 1
  • 4