【发布时间】: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