Javascript 根据其他选择筛选选择选项

Javascript 根据其他选择筛选选择选项,javascript,angularjs,Javascript,Angularjs,我有一个优先级为(1、2、3)的数组,用作多个选择框中的选项。我希望每个优先级只能选择一次。因此,如果在一个选择框中选择了“2”,则应在其他选择框中删除或禁用它。 我找到了一个过滤器,但它在我的代码中无法工作 HTML: {{priority}} JS: .controller('Ctrl',函数($scope,$filter){ $scope.selectedPriority=[]; $scope.data=[]; $scope.priorities=['1','2','3']; $sco

我有一个优先级为(1、2、3)的数组,用作多个选择框中的选项。我希望每个优先级只能选择一次。因此,如果在一个选择框中选择了“2”,则应在其他选择框中删除或禁用它。 我找到了一个过滤器,但它在我的代码中无法工作

HTML:


{{priority}}
JS:

.controller('Ctrl',函数($scope,$filter){
$scope.selectedPriority=[];
$scope.data=[];
$scope.priorities=['1','2','3'];
$scope.objects=[{“日期”:“2017-01-08”,“持续时间”:120},{“日期”:“2017-01-07”,“持续时间”:120}]
})
.filter('arrayDiff',函数(){
返回函数(数组、差异){
变量i,项目,
newArray=[],
异常=Array.prototype.slice.call(参数,2);
对于(i=0;i=0){
newArray.push(项目);
}
}
返回新数组;
};
});
以下是我的代码:

我使用
ng options
创建了一个示例,它使用
禁用when
表达式

:

第二个“disable”是一个表达式,如果计算为true,它将禁用该选项(您可以通过简单地将其替换为
true
)来测试它)。我在下面创建了一个示例:

HTML

<div ng-app="test" ng-controller="MainCtrl">
    <select 
      ng-options="o as o disable when second == o for o in options"
      ng-model="first"
      ng-change="change(first)">
    </select>

    <select
      ng-options="o as o disable when first == o for o in options"
      ng-model="second"
      ng-change="change(second)">
    </select>
</div>
在本例中,第一个ng options指令跟踪第二个ng options指令的ng模型,反之亦然。如果一个选项等于另一个ng模型的值,则该值将被禁用

对于对象数据源,“禁用时间”表达式略有不同,请参阅有关其用法的


我使用
ng options
创建了一个示例,它使用
禁用when
表达式

:

第二个“disable”是一个表达式,如果计算为true,它将禁用该选项(您可以通过简单地将其替换为
true
)来测试它)。我在下面创建了一个示例:

HTML

<div ng-app="test" ng-controller="MainCtrl">
    <select 
      ng-options="o as o disable when second == o for o in options"
      ng-model="first"
      ng-change="change(first)">
    </select>

    <select
      ng-options="o as o disable when first == o for o in options"
      ng-model="second"
      ng-change="change(second)">
    </select>
</div>
在本例中,第一个ng options指令跟踪第二个ng options指令的ng模型,反之亦然。如果一个选项等于另一个ng模型的值,则该值将被禁用

对于对象数据源,“禁用时间”表达式略有不同,请参阅有关其用法的


如果您能提供一个plunker/jsfiddle代码,可能会更好。我在代码中添加了一个plunker:如果您能提供一个plunker/jsfiddle代码,可能会更好。我在代码中添加了一个plunker:但在您的示例中,我没有像这两个这样的特定数量的选择框。我有多个由对象数量生成的框,如果选择了一个选项,它们都应该被过滤。您如何使用可变数量的选择框来实现此过滤器?但是我没有一定数量的选择框,就像您的示例中的这两个。我有多个由对象数量生成的框,如果选择了一个选项,它们都应该被过滤。您如何使用可变数量的选择框实现此过滤器?
label disable when disable for value in array track by trackexpr
<div ng-app="test" ng-controller="MainCtrl">
    <select 
      ng-options="o as o disable when second == o for o in options"
      ng-model="first"
      ng-change="change(first)">
    </select>

    <select
      ng-options="o as o disable when first == o for o in options"
      ng-model="second"
      ng-change="change(second)">
    </select>
</div>
angular.module('test', [])
.controller('MainCtrl', function($scope) {
    $scope.options = [1, 2, 3];
    $scope.change = function(selection) {
      console.log(selection);
    }
});