2017-03-15 57 views
1

我有嵌套的数据对象,我想根据他们选择的过滤器显示给用户。我对角度有点新,但发现如何解决这个问题已经花了我一段时间,并没有什么好的。Angular 1.5并为动态生成的选择设置选定的选项?

<tr ng-repeat="stockItem in stock | filter : stockFilter "> 
    <td>{{stockItem.dateCreated | date:'dd/MM/yyyy (HH:mm)'}}</td> 
    <td>{{stockItem.sku}}</td> 
    <td> 
    <select class="form-control"> 
    <option ng-repeat="supplierOrderStock in stockItem.supplierStock | filter : supplierSelectionFilter" 
      value="{{supplierOrderStock.supplierId}}" > 
       £{{supplierOrderStock.price}} 
     </option> 
    </select> 
    </td> 
</tr> 

我在页面顶部有复选框,当您选中或取消选中它们时,下拉列表会更新过滤的数据。

问题是SELECTED下拉是随机的,通常是在初始渲染时选择的第一个。

我只想要最便宜的值显示在下拉列表中,并且数据排序的方式始终是第一个选择选项。

如何设置下拉选择值,对于每个嵌套重复要么是最便宜的一个,要么只是总是第一个下拉?

回答

2

你可以尝试使用NgOption指令代替:

<div class="col col-50"> 
    <span>Orientation</span> <br>    
    <select name="orientation" id="orientation" ng-options="option.label for option in data.filters.basics.orientations track by option.id" ng-model="data.selectedOrientation"> 
    </select> 
</div> 

在我的情况下data.selectedOrientation是默认的NG-模型,我不得不设置控制器:

$scope.data.selectedOrientation = $scope.data.filters.basics.orientations[($scope.data.selections.basics.orientations[0]-1)] 
+0

谢谢回答,但我试过几次,无法得到它的工作我想要的方式.. 。 – ppumkin

0

在了解了更多内容之后,我终于意识到,如果所有数据都在模型和集合中进行存储和过滤,那么将会更容易。

<select class="form-control" ng-show="stockItem.supplierStockFiltered.length > 0" 
     ng-model="stockItem.selectedSupplier" 
     ng-options="option as getSupplierDropDownText(option) for option in stockItem.supplierStockFiltered track by option.price"></select> 
<span ng-show="stockItem.supplierStockFiltered.length == 0 || stockPackItem.supplierStockFiltered == null "> 
    No Stock 
</span> 

所以当载入数据或当过我点击任何复选框,我只是用angular.forEach(在控制器中设置基于什么都我过滤掉所选择的项目。我绑定的实际两个字段也不包含从服务器返回的数据。但在JS中,您可以在HTML绑定之前动态添加这些字段,并且效果很好!

HTML更清晰,我对模型有更好的控制。

一天结束之后,我不得不这样做,因为现在我需要保存所有选定的下拉值......而现在因为选定的项目被绑定到模型..它的简单易用性。我只是序列化模型并使用服务器上的数据。

1

如果你不想改变你的DOM元素仅仅指刚一NG-模型添加到它

<tr ng-repeat="stockItem in stock | filter : stockFilter "> 
    <td>{{stockItem.dateCreated | date:'dd/MM/yyyy (HH:mm)'}}</td> 
    <td>{{stockItem.sku}}</td> 
    <td> 
    <select class="form-control"> 
    <option ng-repeat="supplierOrderStock in stockItem.supplierStock | filter : supplierSelectionFilter" ng-modal="yourModelForThisDom" 
      value="{{supplierOrderStock.supplierId}}" > 
       £{{supplierOrderStock.price}} 
     </option> 
    </select> 
    </td> 
</tr>