Углубленный фильтр AngularJS через массив в ng-repeat

0

Мой вопрос похож на другие вопросы. Но это другое. Пожалуйста, посмотрите ниже код.

Я хочу фильтровать данные по массиву объектов.

Вот фрагмент

HTML

<div
ng-repeat="(key, value) in ledgerData.ledgers track by $index"
ledger-pop 
index="$index"
ftype="ftypeUpdate"
itemdata="value" 
acntlist="fltAccntList"
class='drEntryForm_{{$index}} pr'
name='drEntryForm_{{$index}}'
update-ledger="updateEntry(entry)"
novalidate
>
</div>

JS

$scope.ledgerDataata = {
      "ForwardedBalance": {
      "amount": 0,
      "type": "CREDIT"
      },
      "creditTotal": 4008,
      "debitTotal": 4008,
      "balance": {
      "amount": 4008,
      "type": "CREDIT"
      },
      "ledgers": [
            {
              "transactions": [
                {
                  "particular": {
                    "name": "Sarfaraz",
                    "uniqueName": "temp"
                  },
                  "amount": 1001,
                  "type": "DEBIT"
                }
              ],
              "description": "testing",
              "tag": "testing"
            },
            {
              "transactions": [
                {
                  "particular": {
                    "name": "frnd",
                    "uniqueName": "frndafafaf14453422453110l26ow"
                  },
                  "amount": 2001,
                  "type": "CREDIT"
                },
                {
                  "particular": {
                    "name": "Rahul",
                    "uniqueName": "cake"
                  },
                  "amount": 3001,
                  "type": "DEBIT"
                }
              ],
              "description": "testing",
              "tag": "testing",
            }
      ]
}

Я пытаюсь фильтровать

ng-repeat="(key, value) in ledgerData.ledgers track by $index | filter:{transactions[0]:{type: 'DEBIT'}}"

Но я получаю ошибку

заранее спасибо :-)

Теги:
angularjs-filter
angularjs-ng-repeat

2 ответа

2

Вам нужно написать вложенный ng-repeat для решения этой проблемы.

  • внешний ng-repeat для массива ledgerData.ledgers и
  • Внутренний ng-repeat для массива транзакций в файле ledgerData.ledgers

        <div ng-repeat="(keyOne, ledger) in ledgerData.ledgers track by $index">
                   {{ledger.description}}
             <div ng-repeat="(keyTwo, transaction) in ledger.transactions | filter:{type:'DEBIT'}">
                      {{transaction.type}} 
             </div>
        </div>
  • 0
    Нет, я не хочу делать таким образом извините
0

На самом деле я получил решение.

Я почти не angularjs-filter googled и получил библиотеку для angularjs-filter.

Вот ссылка, это очень хороший плагин для filter dirty works и как его использовать.

Как я добился успеха:

HTML

ng-repeat="(key, value) in ledgerData.ledgers | pick: debitOnly track by $index"

AngularJS

$scope.debitOnly = (ledger) ->
  'DEBIT' == ledger.transactions[0].type

это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню