使用AngularJS过滤JSON数据,并使用智能表登记ng-repeat

时间:2015-11-20 12:39:01

标签: javascript json angularjs

这是我的JSON数据。

"ATTRIBS":{

          "WWW":
            {
              HIGH:10,
              LOW:1,
              NAME:World Wide Web, 
              TYPE:ON
            },
          "NET":
            {
              HIGH:12,
              LOW:1,
              NAME: Local Net,
              TYPE:OFF
            }
          }

我想在表中列出这个JSON数据(我正在使用智能表),其中我只想列出TYPE:OFF的数据。

我尝试在ng-repeat中使用过滤器,但数据不会填充。

这是我用于列表中的代码:

    <tr ng-repeat="(key, value) in offAttribs">

        <td>{{value.NAME}}</td>
        <td>{{value.key}}</td> //I want abbreviations here i.e, www,NET..etc 
        <td>{{value.TYPE}}</td>
        <td>{{value.LOW}}</td>
        <td>{{value.HIGH}}</td>

这是我的控制器的外观,它从其他服务加载JSON数据。

当我在控制器中使用if条件在ng-repeat中使用offAttribs时,它只会抛出键(索引号0,1,2 ...)而不是(JSON的键,即WWW或NET ....) ,

编辑.............工作代码

    $scope.offAttribs = [];
    for (var key  in attribData){
          attribData[key]['ABRV'] = key;
            if (attribData[key].TYPE == 'OFF' ) {
                $scope.offAttribs.push(attribData[key]);
        }
    }

1 个答案:

答案 0 :(得分:0)

我不认为offAttribs具有您期望的数据结构。 Angular的(key, value) in offAttribs语法仅在offAttribs是对象时才有效。在您的代码示例中,offAttribs是一个数组。

如果您想访问WWW或NET等密钥,则需要offAttribs作为对象:

$scope.offAttribs = {};

for (var key  in attribData){
    if (attribData[key].TYPE == 'OFF' ) {
        $scope.offAttribs[key] = attribData[key];
    }
}

TLDR;数组的键是它的索引。这就是为什么你得到0,1,2而不是WWW,NET等