【问题标题】:angularjs filter remaining dropdown choices after a selectionangularjs过滤选择后剩余的下拉选项
【发布时间】:2013-10-15 22:30:19
【问题描述】:

如果我正在创建一个允许多个字段搜索的系统并希望通过下拉菜单(类似于 Redmine)来执行此操作,我该如何实现呢?具体来说,一旦我选择了“foo”字段并单击了一个显示“添加另一个字段”的按钮,我将无法再次选择“foo”?

initial fields: {"foo","bar","baz"}  
select fields.foo  
add another field
remaining fields = {"bar","baz"}

如果需要澄清,请告诉我。

我找到了一个下拉示例here

澄清

令“foo”为整数 让“酒吧”成为约会 让“baz”成为一个字符串

如果用户添加“栏”字段,我会提供一个日历选择器小部件。 如果用户选择“foo”,我会确保该数字是有效整数。
如果用户选择“baz”,我会检查以确保它是一个有效的字符串。

因此,每个选择都会根据字段选择表现出特定的行为,因此用户必须通过“添加另一个字段”按钮单独选择每个字段。

【问题讨论】:

  • 您好,如果我误解了您的要求,很抱歉,但是如果您想允许用户进行多个字段搜索,只添加一个下拉菜单会限制您最初的想法。您可能希望包含多个下拉列表,以便用户可以选择他/她想要的多个字段。所以第一个将显示三个选项,第二个仅显示两个,第三个仅显示最后一个。您应该阅读所有选定的选项,然后进行搜索。
  • @Guillermo 所以您的建议是在单个下拉菜单中进行多字段选择?如果某些字段只是数字而其他字段不是怎么办?我怎么能让他们输入动态文本?

标签: javascript angularjs


【解决方案1】:

我已经做过很多次了。这是我自己的代码中的一个 sn-p。该代码用于允许商业承包商为其公司选择“附属机构”。

在我的 HTML 视图中:

<select class="input-full" ng-model="currAff" ng-options="aff for aff in availableAffs | filter:notAlreadyAdded"></select>

注意上面的filter:notAlreadyAdded 部分。

在我的控制器中:

$scope.notAlreadyAdded = function(aff){
    // search through all the affiliations that were previously added
    // if the given "aff" is in the previously-added list, return false
    // else, return true
};

对 select 上的 ng-options 使用 filter:notAlreadyAdded 过滤器将遍历选项数组中的每个项目,并将该项目传递给给定的函数。然后,您可以使用该项目进行任何您想要的测试,然后您只需返回一个布尔值,告诉 Angular 是否应该将该项目包含在将来的可能选项列表中。

我希望这能回答你的问题。

【讨论】:

  • 所以在 notAlreadyAdded 函数中我会传递“已添加”列表并从“已知”列表中减去它?
  • 您不需要传递“添加”或“已知”列表,因为它们应该已经可以通过您的$scope 获得,对吧?因此,您应该能够说循环遍历您的 $scope.added 数组(或您所称的任何内容)并检查给定的 aff 是否在该 added 数组中。如果是,则返回false,如果不是,则返回true
  • 啊,非常感谢。我很快就会去测试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多