0

I'm trying to do the following : When you click on "Add Package" its pushes to an array a package where I can specify e.g. Package one, but within that I want to push multiple items (products) "Add Item". The problem is when I create a new package it works, but the items in each package is the same so when I add more to either dynamic package the items within is the same. I assume that's because the array is the same each time, how to I track that by index?

HTML:

<div class="col-12 order-box" ng-repeat="orderpackage in orderproductspackages track by $index">
  <div class="col-12">
    <label for="name_{{$index}}">Package Name</label>
    <input type="text" ng-model="orderpackage.orderpackagename" name="name_{{$index}}" required>                                                 
  </div>
  <div class="col-12" ng-repeat="ordercontent in orderproductscontents track by $index">                       
    <div class="col-2">
      <label for="name_{{$index}}">Product</label>
      <select ng-model="ordercontent.ordercontentname" name="name_{{$index}}" ng-change="onProductChange(ordercontent.ordercontentname,$index)">
        <option ng-repeat="product in productResponse | orderBy:'productname'" value="{{product.productname}}">{{product.productname}}</option>
      </select>                                                                            
    </div>                                   
    <div class="col-2">
      <label for="name_{{$index}}">Quantity</label>
      <input type="text" ng-model="ordercontent.ordercontentquantity" name="name_{{$index}}" ng-keyup="onProductChange(ordercontent.ordercontentname,$index)" required>
    </div>                     
    <div class="col-2">
      <label for="name_{{$index}}">Price</label>
      <input type="text" ng-model="ordercontent.ordercontentprice" name="name_{{$index}}" ng-change="onPriceChange(ordercontent.ordercontentname,$index)" disabled required>                                                 
    </div>
    <div class="col-2">
      <label for="name_{{$index}}">Per {{ordercontent.ordercontentmeasurement}}</label>
      <input type="text" ng-model="ordercontent.ordercontentpriceper" name="name_{{$index}}" disabled required>                                                 
    </div>
    <div class="col-2">
      <label for="name_{{$index}}">Total</label>
      <input type="text" ng-model="ordercontent.ordercontenttotal" name="name_{{$index}}" required disabled>
    </div>
    <div class="col-2">
      <label for="name_{{$index}}">Options</label>
      <a class="button critical small" ng-click="removeOrderContent($index)"><span class="fa fa-minus"></span> Remove</a> 
    </div>                    
  </div>
  <div class="col-12 m20-top p15 text-center add-api" ng-click="addOrderContent()">
    <span class="fa fa-plus"></span> Add Item</a>
  </div>
</div>
<div class="col-12 m20-top p15 text-center add-api" ng-click="addOrderPackage()">
  <span class="fa fa-plus"></span> Add Package</a>
</div>

CODE SNIPPETS :

_this.addOrderPackage = function() {
  _this.orderproductspackages.push({ ordernumber:_this.order.ordernumber });
}

_this.addOrderContent = function() {
  _this.orderproductscontents.push({                    
    ordercontentname:'',                   
    ordercontentquantity:'1',                 
    ordercontentprice:'',
    ordercontentpriceper:'',
    ordercontenttotal:''
  });
}

1 Answer 1

1

Of course, all items in your packages are the same, because you use the same content array inside packages: ng-repeat="ordercontent in orderproductscontents". If I understand you right, you need this array orderproductscontents to be distinctive in each package. To do this store this array in package object, like this:

_this.addOrderPackage = function() {
  _this.orderproductspackages.push({ 
    ordernumber: _this.order.ordernumber,
    contents: []
  });
}

and then just ng-repeat="ordercontent in orderpackage. contents"

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.