多个可选的角度过滤器

时间:2016-01-08 14:25:53

标签: angularjs angular-filters

我对angular很新,而且我不确定如何控制过滤器的行为。

在应用中,我有两个不同的single-select下拉控件,用于过滤数据集的结果并填充表格。但是,即使这些过滤器有效,结果也依赖于两个控件,如果两个都没有使用,则返回空集。所以,我的问题是:我如何选择使用这些过滤器?那么,当未使用过滤器时,应用会返回每个结果,或者通过其中一个控件或两者返回过滤后的结果?

谢谢

以下是代码:

AngularJS

每个控件的过滤器。它们看起来非常相似:

.filter('byField', function () {
    return function (results, options) {
        var items = { options: options, out: [] };
        angular.forEach(results, function (value, key) {

            for (var i in this.options) {
                if ((options[i].value === value.fieldId && 
                     options[i].name === "Field" && 
                     options[i].ticked === true)) {
                        this.out.push(value);
                     }
            }
        }, items);
        return items.out;
    };
})

.filter('byClass', function () {
    return function (results, options) {
        var items = { options: options, out: [] };
        angular.forEach(results, function (value, key) {

            for (var i in this.options) {
                if ((options[i].value === value.documentClass &&
                     options[i].name === "Class" && 
                     options[i].ticked === true)) {
                        this.out.push(value);
                     }
            }

        }, items);
        return items.out;
    };
})

HTML

这就是我要填充表格的rows

<tr ng-repeat="result in results | byField:outputFields | byClass:outputClasses">
    <td>{{result.documentId}}</td>
    ...
</tr>

2 个答案:

答案 0 :(得分:0)

所有事件监听器中的Dorado7.1都提供了一个指向当前事件主机视图的隐式变量视图,该变量可以完全取代使用此场景。

答案 1 :(得分:0)

好吧,正如我想象的那样,答案与set theory比与angular更相关。

我刚刚在空集和每个结果之间创建了一个union,并且它有效。

.filter('byField', function () {
    return function (results, options) {
        var items = { options: options, out: [] };
        angular.forEach(results, function (value, key) {
            if (options.length) {
                for (var i in this.options) {
                    if ((options[i].value === value.fieldId &&
                         options[i].name === "Field" && 
                         options[i].ticked === true)) {
                            this.out.push(value);
                         }
                }
            } else {
                this.out = results.slice();                        
            }                   
        }, items);
        return items.out;
    };
})