Я сделал поиск и нашел это в API Select документации AngularJS :
Выбор между ngRepeat и ngOptions
Во многих случаях можно использовать ngRepeatна элементах вместо ngOptions для достижения аналогичного результата.Тем не менее, ngOptions обеспечивает некоторые преимущества :
Больше гибкости в том, как модель <select>
назначается с помощью выбора, как часть выражения понимания, уменьшает потребление памяти, поскольку не создается новая область для каждого повторного экземпляра, увеличиваетсяСкорость рендеринга путем создания параметров в documentFragment, а не по отдельности. В частности, выбор с повторяющимися параметрами значительно замедляется, начиная с 2000 параметров в Chrome и Internet Explorer / Edge.
Так что гораздо лучше использовать вместо них ngOptionsиз ngRepeat
Исходя из вашей проблемы, нам нужно указать значение по умолчанию, чтобы избежать создания пустого объекта.
И, как говорит Пьер Эммануэль Лаллеман в последней версии Angular 1.7.x, некоторые ошибки, основанные на этой проблеме, исправлены.Я собираюсь установить версию 1.4.8 AngularJS, но при обновлении до последней версии вы сразу заметите разницу.
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.searchCategories;
$scope.recordings = [
{title: 'Medical'},
{title: 'Engineering'},
{title: 'Marketing'},
{title: 'IT'},
{title: 'Videogames'},
];
$scope.setValue = function(){
$scope.searchCategories = $scope.recordings[0];
};
//With more information
$scope.data = {
availableOptions: [
{id: '1', name: 'Medical'},
{id: '2', name: 'Engineering'},
{id: '3', name: 'Marketing'}
],
selectedOption: {id: '3', name: 'Marketing'} //This sets the default value of the select in the ui
};
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js"></script>
<!-- Change to this version -->
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>-->
<h1>Select with AngularJS</h1>
<div ng-app="myApp" ng-controller="myCtrl">
<h5>Selected option: <label>{{searchCategories}}</label></h5>
<label>
With ng-repeat
</label>
<select ng-model="searchCategories">
<option ng-repeat="c in recordings" ng-value="{{c.title}}">{{c.title}}</option>
</select>
<br>
<label>
With ng-option
</label>
<select ng-model="searchCategories" ng-options="c as c.title for c in recordings">
</select>
<button ng-click="setValue()">
Give value by default
</button>
<br>
<label>
With ng-options, data-id and default selected option
</label>
<select
ng-options="option.name for option in data.availableOptions track by option.id"
ng-model="data.selectedOption"></select>
<br>
{{data.selectedOption}}
</div>