【问题标题】:Show/Hide SELECT options?显示/隐藏选择选项?
【发布时间】:2017-04-10 21:59:56
【问题描述】:

假设我有以下内容:

  <select class="form-control" name="blah" ng-model="$ctrl.form.blah" ng-options="item.id as item.name group by item.etype | uppercase for item in $ctrl.opts"></select>

现在我想要的是通过单击一个组按钮来隐藏/显示每个组,即我有每个组的按钮,当我切换单击它时,我希望指定的组选项在选择中隐藏/显示-盒子。

有什么办法吗?


正如 Yatrix 解释的那样,我使用过滤器完成了它,另外我将组件的控制器作为参数传递。这样我就可以访问触发器变量,以确定要过滤的内容。

我现在唯一的问题是我使用的是:

ctrl.form.select_box = ctrl.opts[0].id

我不能再用它来设置默认选项了!!有什么办法可以解决。


这就是我最终的结果:

  <select class="form-control" name="blah" ng-model="$ctrl.form.blah" ng-options="item.id as item.name group by item.etype | uppercase for item in $ctrl.opts | blah:$ctrl"></select>

angular.module('myapp').filter('blah', function() {
return function(items, ctrl) {
    rv = [];
    angular.forEach(items, function(item) {
        if (ctrl.blah_f1 && item.etype == 'type1') rv.push(item);
        if (ctrl.blah_f2 && item.etype == 'type2') rv.push(item);
    });
    return rv;
};
});

我知道直接访问 ctrl 不是一个好主意,但看不到任何其他方式可以干净地影响过滤器。 标志由两个按钮触发,它们的行为都类似于单选框和复选框,即至少一个按钮必须打开,但有可能两个按钮都打开。 这样,用户可以决定选择框中的项目“类型”。

【问题讨论】:

  • 不要将控制器作为参数传递给过滤器。将您的顾虑分开。过滤器应该获取项目列表并对其进行过滤,然后什么也不做。它不应该需要控制器的知识才能工作。
  • 你能把你的代码贴在小提琴里吗?看到你在做什么会容易得多。您在这里没有发布太多代码。

标签: javascript angularjs select toggle options


【解决方案1】:

您可以使用自定义过滤器。这将在前端过滤这些项目。当您将其切换回来时,它将被添加到列表中。

   .filter('myFilter', function () {
      // items = your options
      return function (items) {
        var filtered = [];

        for (var i = 0; i < items.length; i++) {
          var item = items[i];

          // add a property to your model to track what's been removed
          if (!item.removed) {
            filtered.push(item);
          }
        }

        // return all the times that haven't been removed
        return filtered;
      };
    });

【讨论】:

  • 谢谢,......它必须是动态的......即我可以“切换”多次。过滤器如何做到这一点?不过滤一次行为
  • @user1019129 不,过滤器将随着对象的更新而更新。因此,如果您将属性从 true 切换为 false 并返回,它将显示这些项目或隐藏这些项目。
  • 如何将信息传递给过滤器?从您发布的内容中,我看不出过滤器如何计算出他需要隐藏的内容。
  • 我的意思是...我不需要传递参数,但是当单击按钮时,应激活过滤器以根据单击的按钮进行过滤。很可能是某处设置的标志!?
  • @user1019129 它会自动将列表作为第一个参数,所以...in items | yourFilter。如果你想传递额外的参数,你可以这样做...in items | yourFilter:param1:param2
猜你喜欢
  • 2014-11-23
  • 1970-01-01
  • 2012-03-24
  • 2014-05-28
  • 2013-02-24
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多