2016-08-25 3 views
0

Как я могу предотвратить журналы ошибок дубликатов при отображении этого?AngularJS: Ошибка дублирования на ngOptions

<select class="ea-input" ng-model="details.amount" ng-options="amount as amount for amount in amounts"> 
    <option value="" disabled>{{'prepaid.selectamount.placeholder'|translate}}</option> 
</select> 

Это работает, но я получаю сообщение об ошибке консоли дублей:

angular.js:11496 Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: amount in eaOptions, Duplicate key: number:9999, Duplicate value: 9999

Я перепробовал все возможные решения (отсюда) для ngOptions, но это не работает для меня. Как еще я должен использовать этот подход?

[EDIT]: Значения $ scope.amounts, как это: [5, 10, 15, 30, 50, 100]

[UPDATE]: Там, кажется, нет никаких проблем ни с чем. Я полагал, что это была не связанная с этим директива, которая вызывала это. Где-то на шаблоне другая директива вызывает тот же ng-model, и это тот, который вызывает его.

<span ng-if="paymentDetails.maximizer.length > 0"> 
       <cashier-maximizer-field ea-options="paymentDetails.maximizer" ea-model="details.amount"> 
       </cashier-maximizer-field> 
       <div class="divider sm"></div> 
      </span> 
+0

использования трека по $ индекса в нг-опций –

+0

@TarekSalahuddinMahmud '$ index' недоступен в ng-опциях. – Fissio

+0

Каковы значения внутри суммы переменных? Можете ли вы создать образец скрипта? –

ответ

0

Вы должны использовать опцию след так внутренне Угловая будет создавать свой собственный ID и избежать проблем с идентификатором дубликатов в объектах.

изменить код следующим

ng-options="amount as amount for amount in amounts track by amount.id" 

EDIT: К сожалению, я запутаться с нг-повторить директивы. Вы можете использовать трек с небольшим изменением. Я предполагаю, что у вас внутри объекта суммы и идентификатора. Вы можете изменить «id» для другого свойства, если это необходимо. Здесь есть более подробная информация

https://docs.angularjs.org/api/ng/directive/ngOptions

+0

Это не работает. И я где-то читал, что это применимо только к 'ng-repeat'. – ralphcarlo

+0

'$ index' недоступен в ng-опциях. Однако вы можете использовать выражение 'track by' и присваивать ему значение, уникальное для каждой опции. – Fissio

+0

Вы можете сделать 'track by $ id (amount)' вместо этого. –

0
{{'prepaid.selectamount.placeholder'|translate}} 

делает проблему. Без него все прекрасно.

Проверьте код ниже

var app = angular.module('myApp', []); 
 
app.controller('myCtrl', function($scope) { 
 
    $scope.details={}; 
 
    $scope.amounts = [5, 10, 15, 30, 50, 100]; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="myApp" ng-controller="myCtrl"> 
 

 
    <select class="ea-input" ng-model="details.amount" ng-options=" amount for amount in amounts "> 
 
    <option value="" disabled>Select</option> 
 
    </select> 
 
    {{selectedName}} 
 
</div>

+0

Нет. Удалено это также. Ошибка все еще существует. – ralphcarlo

0

попробовать это нг-параметры = "количество для суммы в количествах"

+0

Такая же проблема. Не работает . Ошибка по-прежнему сохраняется. – ralphcarlo

Смежные вопросы