2014-11-28 2 views
2

Я использую Угловое, это мое мнение:Угловая нг-повтор дубликатов

<div class="col-sm-6" ng-repeat="contact in service.contacts"> 

    <label class="control-label mb10">{{contact.textDescription | decodeURIComponent}}</label> 
       <select multiple="multiple" selectize> 
        <option>{{contact.value}}</option> 
       </select> 

    </div> 

У меня есть одна проблема, и я не могу придумать, как решить эту проблему. Для contact.textDescription мне нужно поместить только уникальные значения, поэтому, если этот contact.textDescription дублируется, не создавайте поле дважды, а добавляйте это contact.value к параметрам того же самого contact.textDescription, который уже существует. Итак, что-то вроде этого:

if(contact.textDescription is duplicate) { 
contact.value.addTo(contact.textDescription which already exists) 
} 

Может быть, какой-либо фильтр применять или?

ответ

0

К пониманию того, что вы упомянули, я думаю, что фильтр Упоминание в следующем ответе поможет вам сделать то, что вы хотите

Use this link to go to the question

0

Вы можете использовать нг-опции для группы и отображать уникальное значение.

0

uniqFilterangular-filter модуль.
Использование:collection | unique: 'property' или nested.property
Псевдонимы:uniq

Пример:
JS:

function MainController ($scope) { 
    $scope.orders = [ 
    { id:1, customer: { name: 'John', id: 10 } }, 
    { id:2, customer: { name: 'William', id: 20 } }, 
    { id:3, customer: { name: 'John', id: 10 } }, 
    { id:4, customer: { name: 'William', id: 20 } }, 
    { id:5, customer: { name: 'Clive', id: 30 } } 
    ]; 
} 

HTML:

<th>Customer list:</th> 
<tr ng-repeat="order in orders | unique: 'customer.id'" > 
    <td> {{ order.customer.name }} , {{ order.customer.id }} </td> 
</tr> 

РЕЗУЛЬТАТ:

Список клиентов:
- John 10
- William 20
- Клайв 30

0

Группировка контактов по textDescription должны решить вашу проблему. Попробуйте что-то вроде этого:

HTML:

<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Example - GroupBy Filter</title> 

    <script src="angular-1.4.7.min.js"></script> 
    <script src="script.js"></script> 

</head> 
<body ng-app="app"> 
    <div ng-controller="MainController"> 
     <div ng-repeat="(key, contacts) in (service.contacts | groupBy: 'textDescription')"> 

      <label class="control-label">{{key}}</label> 
      <select multiple="multiple" selectize> 
       <option ng-repeat="contact in contacts">{{contact.value}}</option> 
      </select> 
     </div> 
    </div> 
</body> 

script.js:

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

app.controller("MainController", function ($scope) { 
    $scope.service = {}; 
    $scope.service.contacts = [{ 
     "textDescription": "td1", 
     "value": "1" 
    }, { 
     "textDescription": "td2", 
     "value": "2" 
    }, { 
     "textDescription": "td3", 
     "value": "3" 
    }, { 
     "textDescription": "td1", 
     "value": "4" 
    }, { 
     "textDescription": "td3", 
     "value": "5" 
    }, { 
     "textDescription": "td1", 
     "value": "6" 
    }]; 
}); 

app.filter('groupBy', function() { 
    var results={}; 
    return function (data, key) { 
     if (!(data && key)) return; 
     var result; 
     if(!this.$id){ 
      result={}; 
     }else{ 
      var scopeId = this.$id; 
      if(!results[scopeId]){ 
       results[scopeId]={}; 
       this.$on("$destroy", function() { 
        delete results[scopeId]; 
       }); 
      } 
      result = results[scopeId]; 
     } 

     for(var groupKey in result) 
      result[groupKey].splice(0,result[groupKey].length); 

     for (var i=0; i<data.length; i++) { 
      if (!result[data[i][key]]) 
       result[data[i][key]]=[]; 
      result[data[i][key]].push(data[i]); 
     } 

     var keys = Object.keys(result); 
     for(var k=0; k<keys.length; k++){ 
      if(result[keys[k]].length===0) 
       delete result[keys[k]]; 
     } 
     return result; 
    }; 
}); 

Теперь вы все контакты сгруппированы по textDescription, так что поле для него (<label>) создается только один раз, а значения добавляются к <option> тегам

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