Angular将特定数据检索到$ scope变量不起作用

时间:2016-08-31 01:51:23

标签: javascript angularjs json angularjs-scope

我在这里初始化

 $scope.statuses = [];

然后,如果我只是将数据从$ http.get设置为$ scope变量,那么“有效”,但我需要将其过滤掉。

$scope.statuses = result.data.Devices; 
console.log($scope.statuses);

在dev工具控制台输出

中返回这样的数据数组
  

0:对象     $$ hashKey   :   “对象:5”   援助   :   “oAAABTUAAg ==”   DKiIndex   :   “DKi00000002”   DefaultPayload   :   “C:\ ProgramData \”   设备编号   :   “00022B9A000000010001”   DeviceStatus   :   3   ManifestIdList   :   阵列[3]   PendingManifestId   :   空值   PendingTimeStamp   :   “0001-01-01T00:00:00”   沙   :   “R2tiZRQgY / iohXZt5O4HaQwtVe / adWU2VOcKaelJ3Us =”   StagedManifestIdList   :   阵列[0]

但是我只想要一些特定的数据

$scope.statuses = result.data.Devices.DeviceStatus;

为什么说“未定义”,我该怎么做?

所以0:对象DeviceStatus在那里..:/

<div ng-app="app" ng-controller="DeviceController as vm">


...
        <tr ng-repeat="device in vm.devices">
             <td>{{device.DeviceId}}</td>
             <td>{{device.DeviceStatus}}</td>
             <td>{{device.Aid}}</td>
             <td>{{device.Sha}}</td>
        </tr>
...

基本上我希望在它进入ng-repeat循环之前操纵Javascript / angular(.js)中的数据

因此甚至可以使用$ scope甚至是适当的东西?

我知道我要更改一些数据,例如

字段中的某些数据被[]包围,例如[01,02,03]这样做 {{device.aid.join(',')}}会“修复”[]问题,但我需要有这样的功能吗?我在哪里可以使用它?

// usage {{displayArchived(item.archives)}}
$scope.displayArchived = function(archives){
    return (archives.length > 0) ? archives.join(',') : 'none';
};

那么“let”会帮助设置DeviceStatus吗?

  let statuses = ['Old Device', 'New Device', 'Activated', 'Unactivated'];

1 个答案:

答案 0 :(得分:1)

在这种情况下,result.data.Devices是一个对象数组,如下所示:

[
   {DeviceId : "00022B9A000000010001" DeviceStatus : 3 .... },
   {DeviceId : "00022B9A000030011111" DeviceStatus : 9 ...},
   ....
]

因此,当您尝试获取result.data.Devices.DeviceStatus时,没有名为DeviceStatus的数组元素,这就是您返回undefined的原因。

您需要遍历设备数组以获取特定设备的DeviceStatus

angular.forEach(result.data.Devices, function(value, index){
           $scope.statuses.push(value.DeviceStatus);
         });

如果您知道自己需要哪种设备,则可以直接访问:

var index = 1;
$scope.statuses = result.data.Devices[index].DeviceStatus;

修改

如果您想获取所有设备并使用模板显示{{device.DeviceStatus}},这是一个解决方案:

代码:

$scope.devices = result.data.Devices;

模板:

<div ng-repeat="device in devices">
    {{ device.DeviceStatus }} 
</div>

在我们的代码中,我们将request.data.Devices数组分配给$scope.devices。然后在模板中,我们使用ng-repeat浏览device中的每个$scope.devices并显示设备的DeviceStatus

<强> EDIT2:

为了将DeviceStatus与其实际名称相匹配,您可以创建自定义过滤器。

在您的代码中创建过滤器:

app.filter('deviceStatus', function () {
  return function (status_id) {
      var statuses = ['Old Device', 'New Device', 'Activated', 'Unactivated'];
      return statuses[status_id];
  };
});

您现在可以在模板中使用新过滤器:

<td>{{device.DeviceId | deviceStatus}}</td>

我们将DeviceId传输到我们的自定义deviceStatus过滤器中,以便在模板中获取正确的状态名称。