使用AngularJS

时间:2017-02-06 23:55:15

标签: html angularjs json

我想创建一个页面,您可以在其中添加1到n个产品。

我和AngularJS一起工作了几个月,但我觉得这很难。

我为之解决的HTML代码是这样的:

https://plnkr.co/edit/2MYbkYeAf4lZSRIh2c8l?p=preview

这是整个模板:

<div class="container text-center">
    <h1>Make a sale</h1>
    <br>
    <form>
        <div class = "divedp">
            <label for="idNumeroFactura" class="col-form-label" >Invoice number: </label>
            <input name="inpNumeroFactura" id="idNumeroFactura" maxlength= "8" type="text" ng-model="numeroFactura" class= "form-control"/>
        </div>
        <h6 class="small">products</h6>
        <div class = "divedp">
            <label for="idProducto">Product: </label>
            <select name="sltProducto" ng-options ="producto.nombreProducto for producto in productos"
                ng-model="producto" class="form-control input-sm" id="idProducto">
                <option value="">-Choose the product-</option>
            </select> 
             <br>
            <label for= "idCantidad" >Quantity: </label>
            <select ng-model="cantidad" id="idCantidad" class="form-control input-sm">
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
            </select>
            <br>
            <button ng-click="showDiv=true; agregarProducto()" class="btn btn-default" ng-hide="showDiv"> Add another product</button>
        </div>
        <div ng-show="showDiv"> Here should appear the new product</div>

        <button ng-click="guardarVenta()" class="btn btn-primary" type="submit">Save sale</button>
    </form>
    <span >{{mensaje}}</span> <br>
</div>

这是我想重复的部分:

<div class = "divedp">
    <label for="idProducto">Product: </label>
    <select name="sltProducto" ng-options ="producto.nombreProducto for producto in productos"
        ng-model="producto" class="form-control input-sm" id="idProducto">
        <option value="">-Choose the product-</option>
    </select> 
     <br>
    <label for= "idCantidad" >Quantity: </label>
    <select ng-model="cantidad" id="idCantidad" class="form-control input-sm">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
    </select>
    <br>
    <button ng-click="showDiv=true; agregarProducto()" class="btn btn-default" ng-hide="showDiv"> Add another product</button>
    </div>

所以当我点击添加另一个产品按钮时,所有div代码部分应该在第一个div下方重复。这样,用户就可以用他想要的数量选择他想要的所有产品。

我正在考虑创建一个模板,但这已经是一个模板......我使用ui-router来做路由器部分,但我从未在模板中重复过模板,而且我从未使用过模板模板里面的模板。

此外,这种方法让我有些疑惑:

  • 如何在Json数组上连接属性? (我使用Json在前端和后端之间进行通信)
  • 如何避免用户重复相同的商品?我应该把这个问题带到AngularJS控制器,还是可以用指令来处理它?<​​/ li>

感谢阅读。

1 个答案:

答案 0 :(得分:1)

由于您没有显示任何控制器,我只能提供解决方案的抽象概念。无论如何这里都是。

<强>重复

使用ngRepeat完成数据收集的简单循环。在您的控制器中,您需要操纵集合,而角度将为您传播更改

<div ng-repeat="productBlock in productBlocks track by productBlock.id">
    <!-- your repeated code here -->
    <button ng-click="removeProductBlock(productBlock.id)"> remove </button>
</div>
<button ng-click="addProductBlock()"> add </button>

ngRepeat documentation

禁止用户选择重复的产品

您可以再次通过操纵控制器中的集合来实现此目的。这一次,该系列将保留仍可供选择的产品。 Angular将帮助您使用ngOptions指令

将更改从控制器传播到视图
<select 
    ng-options="product as product.label for product in productsAvailable track by product.id"        
    ng-change="selectProduct(product.id)">
</select>

selectProduct方法将负责从productsAvailable集合中删除产品。 请记住,它还必须&#34;放回&#34;任何未在更新时使用的产品。

ngOptions documentation