1

Ok, Херес рассола:значения Привязки к объекту свойства, в объекте, в массиве, AngularJS

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

<!-- start the list/loop --> 
<ion-list ng-repeat="this in menuItems.items track by $index" type="item-text-wrap"> 

    <a class="item" ng-click="addToCart({{this}})">{{this.name}} 
     <span class="badge badge-stable">{{theCart[$index].product.qty}}</span> 
    </a> 

</ion-list> 
<!-- end the list/loop --> 

возникает проблема когда я пытаюсь получить значение из элемента в корзине «theCart [$ index] .product.qty», так как индекс $ не привязан к какому-либо определенному элементу, просто позиция в массиве. Мне нужно получить уникальный идентификатор 2 объектов в глубине массива, поэтому я могу быть уверен, что получаю правильные значения с двусторонней привязкой данных. Угловой так приятно предоставить.

theCart: [{ 
    product: { 
     id: 1, 
     section: 'sides', 
     name: 'mayo', 
     price: 7, 
     outOfStock: '', 
     qty: 1 
    } 
}, { 
    product: { 
     id: 0, 
     section: 'sides', 
     name: 'ranch', 
     price: 6, 
     outOfStock: '', 
     qty: 1 
    } 
}]; 

Заранее благодарим за понимание.

+0

В чем именно проблема? «this.id» не будет работать? – pixelbits

ответ

0

Я не уверен, правильно ли я понял ваш вопрос.

Но если предположить, что menuItems.items представляет собой массив из продуктов, которые по какой-то причине его элементы не имеют свойство qty и theCart является другим массивом продуктов, в которых его элементы действительно имеют свойство qty. И то, что вы хотите, чтобы получить доступное количество продукта, который вы итерация из массива theCart, вы могли бы сделать это с помощью filter 'filter', как это:

<ion-list ng-repeat="item in menuItems.items" type="item-text-wrap"> 
    <a class="item" ng-click="addToCart(item.id)">{{item.name}} 
     <span class="badge badge-stable"> 
      {{(theCart | filter:{product:{id:item.id} })[0].product.qty}} 
     </span> 
    </a> 
</ion-list> 

Я должен сказать, что это очень уродливый способ сделать это, я бы не рекомендовал делать это так никому. Было бы гораздо лучше создать «объединенный массив» этих 2 массивов в контроллере и повторить этот «объединенный массив» вместо.

+0

Спасибо. Я согласен, что это выглядит довольно уродливо. Я думаю, что я просто реорганизую структуру массива как один массив «menu []» с атрибутом «cart: 0» и «cart: 1» boolean. Кажется, что это будет Угловой способ, поскольку он будет использовать двустороннюю привязку данных в своей наиболее дистиллированной форме. Минимальный код для получения результата. Согласовано? – user3865639