Sydney
Sydney

Reputation: 12222

AngularJS - extra blank option added using explicit ng-repeat in select tag

I have a select list created with ng-repeat and not ng-options. The issue I have is that there is an extra blank list item that disappears as soon as the user change the value.

The answer to AngularJS - extra blank option added using ng-repeat in select tag mentions that the selected item should be initialized to avoid that issue. I did it but I still have a blank entry.

HTML:

<select ng-model="selectedLanguage">
  <option ng-repeat="language in languages" value="{{language}}" ng-selected="selectedLanguage == language">{{language.name}}</option>
</select>
<h2>{{selectedLanguage}}</h2>

Controller:

app.controller('Ctrl', function($scope) {
  $scope.languages = [{ name: "English", key: 'en' }, { name: "French", key: 'fr'}];
  $scope.selectedLanguage = $scope.languages[0];
});

The Plunker

Upvotes: 0

Views: 3249

Answers (1)

shaunhusain
shaunhusain

Reputation: 19748

You should use ng-options I updated your plunkr

http://plnkr.co/edit/Iz7wFfG9l6wmQ50w2RpP

HTML

<!DOCTYPE html>
<html ng-app="app">
  <head>
    <script data-require="angular.js@1.2.1" data-semver="1.2.1" src="http://code.angularjs.org/1.2.1/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body ng-controller="Ctrl">
    <h1>Hello Plunker!</h1>
    <select ng-model="selectedLanguage" ng-options="language.name | uppercase for language in languages">
    </select>
    <h2>{{selectedLanguage}}</h2>
  </body>

</html>

JS (no changes)

// Code goes here

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

app.controller('Ctrl', function($scope) {
  $scope.languages = [{ name: "English", key: 'en' }, { name: "French", key: 'fr'}];
  $scope.selectedLanguage = $scope.languages[0];
});

Upvotes: 2

Related Questions