使用angular禁用select数组中的选项

时间:2017-05-18 16:57:56

标签: angularjs drop-down-menu angularjs-ng-repeat

我有一个ng-repeat,它创建了一个select元素数组。 (选择允许配置数据表中的列:'名称','地址','电话'等。)

没有两列可以使用相同的数据。

因此,如果为第一列选择了'name',则在选择所有其他列时禁用name。这样:

col1 options       col2  options   col3  options  etc.
-name             -name            -name
-address          -address         -address
-phone            -phone           -phone

变为

col1              col2  options   col3  options  etc.
-name SELECTED    -name DISABLED  -name DISABLED
                  -address        -address 
                  -phone          -phone

你明白了。

这是我到目前为止的地方。我试图设置一个名为unique的测试,如果没有在其他任何地方选择该选项,它将返回true,但我没有达到目标:

<div ng-repeat="column in m.data.Columns track by $index">
    <label for="ColumnTypeCode{{ $index }}" class="control-label">Column #{{ $index + 1 }} Code</label>
    <select 
            id="ColumnTypeCode{{ $index }}" 
            class="form-control" 
            ng-style="{'width': '100%'}" 
            name="ColumnTypeCode{{ $index }}"
            ng-model="column.ColumnCode" 
            required data-ng-change="SetColumnDefaults(column)"
            ng-options="x.ColumnCode as x.ColumnCode disable when !x.ColumnCode.unique for x in m.data.IncidentTypeColumns   | filter:{ ShowOnClaimsGrid: true } "
            unique_item_name="ColumnCode"
            ng-disabled="column.Mandatory"></select>
</div>

角度的双向绑定是否可以判断给定选择是否在模型中,并在所有其他选择中禁用该选项?

只是sptiballin'在这里:

我可以在x.ColumnCode.takenAlready 时设置禁用,然后将takenAlready设置为true。我想我需要一个功能来做到这一点。

ng-change="setOptionTaken(x)";

$scope setOptionTaken = function(column) {
        column.takenAlready = column.ColumnCode.length;
    }
}

嗯。不,我需要一系列可以迭代的takeAlready类型。

1 个答案:

答案 0 :(得分:0)

一种方法可能是在ng-click元素上添加<select>侦听器,该元素绑定到控制器中的函数,您可以使用该元素检查与列ID对应的选定值。有了这些知识(即知道选择了什么标签以及它是哪个列),您可以手动禁用其他两个选项中的选项。

解释它,感觉有些笨重,但我认为它会起作用。