Search code examples
javascriptangularjsangularjs-directiveangularjs-scopeangularjs-ng-repeat

AngularJS : Remove empty select option in angular ng-repeat


I am using ng-repeat to render options with different value and text here, and also setting the default one.But again angular adds an empty undefined option.

<select ng-model="newItem.financial_year_id" required style="min-width:180px;">
   <option ng-repeat="financial in account_year" value="{{financial.id}}" ng-selected="financial.status=='Active'">{{financial.financial_year}}</option>
</select>

Now the active one is selected but the empty option still rendering.


Solution

  • Try ng-options instead:

    <select ng-model="selectedFinancial" ng-options="c.financial_year for c in account_year"
            required style="min-width:180px;">
    </select>
    

    DEMO

    You should think about redesigning your model like that to use ng-options. When we use <select>, there is only 1 selected item and this item should be a property of $scope referencing an item in the list => we don't need to duplicate 1 more property with "active" and "inactive" for all objects.

    Your current model design makes sense when there are more than 1 selected item, but if there are more than 1, we should use a list of checkboxes instead of <select>

    If you want to bind with Id, try this:

    <select ng-model="selectedFinancialId" ng-options="c.id as c.financial_year for c in account_year"
            required style="min-width:180px;">
    </select>
    

    DEMO