【问题标题】:Filter next dropdown values based on already selected value根据已选择的值过滤下一个下拉值
【发布时间】:2016-12-23 18:46:41
【问题描述】:

我有一个包含四个选项的下拉菜单。我选择第一个选项为“John (1)”并添加一行。现在下一个下拉菜单应该只显示下拉菜单中的三个选项,即,它应该排除上一个下拉选择值的值,即“John (1)”。在下一个添加行上,它应该排除前两个选定的下拉值。这是否可以实现。先感谢您。下面是小提琴。

<div ng-app ng-controller="LoginController">
    <table class="table table-striped">
    <thead>
        <tr>
            <th>Description</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="mapping in viewTemplateRow">
            <td>
                <select class="form-dropdown" id="templateId" ng-model="mapping.id">
                    <option value="">Please Select...</option>
                    <option ng-repeat="option in viewTemplateData" value="{{option.id}}" ng-selected="{{option.id == mapping.id}}" ng-model="viewTemplateData">{{option.name}} ( {{option.id}} )</option>
                </select>
            </td>
        </tr>
    </tbody>
</table>
<button type="button" class="button button-compact" ng-click="addRow();">Add New Row</button>
</div>

https://jsfiddle.net/Lt7aP/3787/

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    为您的 ng-repeat 添加一个过滤器以避免所有已添加的对象:

    $scope.notSelected = function(item){
            for (var i in $scope.viewTemplateRow){
                if ($scope.viewTemplateRow[i].id==item.id)
                return false
          }
          return true;
        }
    

    您的 html 将如下所示:

    <option ng-repeat="option in viewTemplateData | filter: notSelected" value="{{option.id}}" ng-selected="{{option.id == mapping.id}}" ng-model="viewTemplateData">{{option.name}} ( {{option.id}} )</option>
    

    注意:考虑为选择器项的 ng-options 替换 ng-repeat 指令。

    【讨论】:

    • 我看到的问题是,由于双向数据绑定,它修改了所有下拉列表。我想用一组独特的选项值来制作每个下拉菜单。例如,第一个下拉菜单应该有“1”、“2”、“3”、“4”等选项。然后如果选择了“1”,那么在添加行第二个下拉菜单中应该给我“2”、“3”、“4”作为选项,保持第一个下拉选项仍然是“1”、“2”、“3”、“4”仍然完好无损。
    • 您可以使用 angular.copy() 复制对象并丢失双向数据绑定的引用。
    • 尝试使用 angular.copy(),没有得到如上所述的所需输出。
    • 如何在没有过滤器的情况下创建一个包含 ng-repeat 之外的所有选项的第一个选择器。然后在选择器的其余部分执行您想要的操作。检查这个:jsfiddle.net/qwo099uy/1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2018-04-16
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2015-05-19
    相关资源
    最近更新 更多