Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于多维JavaScript对象的AngularJS过滤器_Javascript_Angularjs - Fatal编程技术网

基于多维JavaScript对象的AngularJS过滤器

基于多维JavaScript对象的AngularJS过滤器,javascript,angularjs,Javascript,Angularjs,我有一个表,其中输出了许多行数据。在该表中,我有一个列状态 大约有30个不同的状态值。该列有一个下拉列表,可以按不同的状态进行筛选,但在下拉列表中,我只有以下状态:Any、Pending、Inactive和Placed 4种状态中的每一种都有许多不同的状态值 如果我像这样创建一个JavaScript对象: var statuses = { 'Pending': [ 'Entered', 'Submitted, 'Approved'

我有一个表,其中输出了许多行数据。在该表中,我有一个列状态

大约有30个不同的状态值。该列有一个下拉列表,可以按不同的状态进行筛选,但在下拉列表中,我只有以下状态:Any、Pending、Inactive和Placed

4种状态中的每一种都有许多不同的状态值

如果我像这样创建一个JavaScript对象:

var statuses = {
    'Pending': [
         'Entered',
         'Submitted,
         'Approved'
     ]
};
在挂起之后,还有另一个具有更多状态的非活动阵列


如何在Angular中创建一个过滤器,以显示结果,而不是下拉列表中的状态为Pending,而是从上面的Pending数组中的状态?

您只需访问状态中的Pending:

$scope.statuses = statuses;
在您的选择中:


为了基于所选元素填充表格,必须使用select元素中的ng模型获取值。为了确保ng模型变量在每次进行选择时都得到它,您可以使用ng选项从您的状态填充所有选项。例如:

<select ng-change='loadStats()' ng-model='selectedStatus' ng-options='k as k for (k,v) in stats'>
</select>
选择完成后,要填充表格,需要定义过滤器。筛选器取决于选定状态的数组和所有行。要填充表,可以使用对象数组。这个阵列也可以帮助我们过滤。假设表的数据表示为:

var tableData = [
{status: 'Entered', value: '1'},
{status: 'Entered', value: '2'},
{status: 'Submitted', value: '3'},
{status: 'Approved', value: '4'},
{status: 'A', value: '1'},
{status: 'B', value: '2'},
{status: 'C', value: '1'},
]
现在,为了填充表,我们使用如下定义的过滤器:

var app = angular.module('myApp', []);
app.filter('filterMyStats',function(){
    return function (table, status) {
        return table.filter(function(row){
            if (status.indexOf(row.status) != -1) {
                return true;
            } else {
                return false;
            }

        })
    }
});
我们使用ng重复应用过滤器:

这里有一个

状态值反映在表格中,我试图让表格显示所有行,其中状态等于下拉列表中所选值的状态之一。这更清楚吗?用户选择Inactive->code检查Inactive下的所有状态,显示status->Inactive status所在的行。
var tableData = [
{status: 'Entered', value: '1'},
{status: 'Entered', value: '2'},
{status: 'Submitted', value: '3'},
{status: 'Approved', value: '4'},
{status: 'A', value: '1'},
{status: 'B', value: '2'},
{status: 'C', value: '1'},
]
var app = angular.module('myApp', []);
app.filter('filterMyStats',function(){
    return function (table, status) {
        return table.filter(function(row){
            if (status.indexOf(row.status) != -1) {
                return true;
            } else {
                return false;
            }

        })
    }
});
<tr ng-repeat="tr in tableShow | filterMyStats:status">
    <td>{{tr.status}}</td><td>{{tr.value}}</td>
</tr>