Я использую версию AngularJS 1.4.7
и имеют простой контроллер AngularJS, который содержит массив объектов. Я хотел бы отображать эти объекты в качестве опций в выборе по ngOptions
.Дубликаты в ngOptions
Проблема в том, что каждый объект дублируется, и я не знаю почему. Этот дубликат представлен только в select, исходный объект выглядит отлично.
angular
.module('demo', [])
.controller('DemoCtrl', DemoCtrl);
function DemoCtrl() {
var vm = this;
vm.demoOptions = [
{value: 1, label: 'Demo 1'},
{value: 2, label: 'Demo 2'},
{value: 3, label: 'Demo 3'}
];
vm.selected = null;;
}
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular.min.js"></script>
<div ng-app="demo" ng-controller="DemoCtrl as vm">
<select ng-options="item as item.label for item in vm.demoOptions track by item.value" ng-model="vm.selected">
<option value="" selected ng-if="vm.selected === null">-- select --</option>
</select>
<p ng-if="vm.selected !== null">Selected item: <code>{{vm.selected}}</code></p>
<p ng-if="vm.selected === null">No item is selected.</p>
<pre>vm.demoOptions == {{vm.demoOptions|json}}</pre>
</div>
Является ли это ошибка? Как удалить дубликаты без использования фильтра?
Примечание: Данная проблема возникла после обновления AngularJS от версии 1.3.19
до 1.4.7
. Я прочитал журнал изменений, но он рассказывает только о добавлении track by
- я добавил его, но без эффекта.
А, спасибо. Я сделал поиск Google только с разновидностями дубликатов ключевых слов. –
Фактически вам не нужно ng-show/ng-if в опции: https://jsfiddle.net/aiubian/ja217g5v/2/ (1.4.7) –
@AnikIslamAbhi OP будет иметь '- select - 'исчез, как только вы что-то выбрали. поэтому вам нужно использовать ng-if или удалить опцию в версии 1.4.7 –