gpt4 book ai didi

select - AngularJS 过滤多个选择输入

转载 作者:行者123 更新时间:2023-12-04 12:09:53 24 4
gpt4 key购买 nike

我真的很惊讶在任何地方都没有关于 AngularJS 更高级过滤机制的文档或问题——它对任何 UI 都是必不可少的。

我需要过滤掉包含当前项目的选择选项。问题是如何在我们遍历过滤器中的项目时拼接出每个选项,并为正在过滤的列表中的每个选择返回正确的结果。

例如,如果我们有三个地区——加拿大、英国、美国——选择输入应该是这样的:

Canada
[select]
[option0] United Kingdom
[option1] United States

United Kingdom
[select]
[option0] Canada
[option1] United States

United States
[select]
[option0] Canada
[option1] United Kingdom

.. 等等...

HTML:
<div ng-repeat="region in data.regions">
<h2> {{region.name}} </h2>
<input ui-select2="version2" type="hidden" name="keywordsLocal-{{$index}}" class="region-keywords input-xlarge" data-ng-model="data.regions[$index].keywords" required-multiple />
<select ui-select2 id="copy-{{$index}}" ng-show="region.length > 1" class="input-xlarge" ng-click="_copy($event, $index)" data-ng-model="data.regions[$index].keywords">
<option value="">Use the same keywords as:</option>
<option ng-repeat="region in data.regions | myFilter" value="{{region.keywords}}">{{region.name}}</option>
</select>
</div>

Javascript:
app.filter('myFilter', function() {

return function(items) {
var group = [];

for (var i = 0; i < items.length; i++) {
group.push(items.name);
}

for (var i = 0; i < group.length; i++) {
group[i].splice(i, 1);
}

return group;

};

});

最佳答案

使选择不包括当前选择的内容存在缺陷。我将在解决方案中包含该错误,以便您可以看到它。

ng-options 正是您所需要的。这是一个使用 2 个单独选择的示例。

<select ng-model='selectedCountry' ng-options='country.name for country in countries'></select>
<select ng-model='selectedCountry' ng-options='country.name for country in filteredCountries()'></select>

这是 $scope件。请注意,filteredCountries 只是返回国家,减去选定的国家。
  $scope.countries = [{name:'United States'},{name:'United Kingdom'},{name:'Canada'}];

$scope.filteredCountries = function(){
var filteredCountries = [];
angular.forEach($scope.countries, function(val, key){
if(val !== $scope.selectedCountry){
this.push(val);
}
},filteredCountries);
return filteredCountries;
};

您会注意到的错误是,一旦您选择第二个值,它就不会显示您选择的值,因为它会立即从选项中过滤掉。这不是最好的用户体验。

工作示例:
http://plnkr.co/edit/cRBdkE3akCeBXYqfyHFO

更新:
由于您不能将 ng-options 与 AngularUI Select2 指令一起使用,这里是一个带有 select 2 示例的 plunkr: http://plnkr.co/edit/Hmt1OXYvtHOAZPzW7YK3?p=preview

也不是上面列出的filteredCountries函数,一个 watch会更有效率。它只会在检测到监视值发生变化时运行代码。
$scope.$watch('version1model',function(){
$scope.filteredItems = [];
angular.forEach($scope.items, function(val, key){
if(val.id != $scope.version1model){
this.push(val);
}
},$scope.filteredItems);
});

关于select - AngularJS 过滤多个选择输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15259732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com