使用AngularJS使用Spark REST API

时间:2015-02-15 02:27:00

标签: angularjs rest

我在这个主题上看过几件事情,但要么他们没有真正回答我的问题,要么我太密集了,无法应用于我的情况。我有一个我一直在玩的Spark Core,它目前连接到一个光传感器,并将该数据发布到Spark的云,它有一个RESTful API。我正在尝试使用AngularJS消耗这些数据,但我有两个问题我无法解决。首先是我希望数据不断更新。第二个是提取我想要的精确信息。 API调用返回:

{
  "cmd": "VarReturn",
  "name": "light",
  "result": 40.29304029304029,
  "coreInfo": {
    "last_app": "",
    "last_heard": "2015-02-15T02:07:58.631Z",
    "connected": true,
    "deviceID": "51ff70065082554913470887"
  }
}

我想要“结果”中的数据。到目前为止我正在尝试:

var app = angular.module('spark', ['ngResource'])

app.factory("light", function($resource) {
  return $resource("https://api.spark.io/v1/devices/51ff70065082554913470887/light?access_token=[redacted]");
})

app.controller('MainCtrl', function($scope, light) {
    $scope.conditions = light.get();
});

我将其与:

挂钩
<body ng-app="spark" ng-controller="MainCtrl">
The light level is {{conditions}}
</body>

我得到了:

  

灯光亮度为{“cmd”:“VarReturn”,“name”:“light”,“result”:39.8095238095238,“coreInfo”:{“last_app”:“”,“last_heard”:“2015-02 -15T02:09:34.483Z“,”connect“:true,”deviceID“:”51ff70065082554913470887“}}

我知道我需要为light.get添加一个回调函数,但我不知道该函数应该是什么样的,或者如何将它合并到我的html中。我不知道如何从调用返回的数据中提取出我想要的特定数据。

编辑:

正如mnemosyn指出的那样,获取我需要的数据非常简单,但我仍然不明白如何不断更新。我读过的教程让它看起来像是自动发生的。

1 个答案:

答案 0 :(得分:2)

不确定我是否有你,但不会

<body ng-app="spark" ng-controller="MainCtrl">
The light level is {{conditions.result}}
</body>

实现你想要的?

或者,您可以在控制器中进行投影,例如

app.controller('MainCtrl', function($scope, light) {
    $scope.data = light.get({}, function(){
        $scope.conditions = $scope.data.result;
    });
});

但后一种形式通常不必要地复杂化,因为Angular表达式非常强大。

要定期重新加载,您可以使用$interval service

app.controller('MainCtrl', function($scope, $interval, light) {
    $interval(function() {
        $scope.data = light.get({}, function(){
            $scope.conditions = $scope.data.result;
        });
    }, 1000);    
});

重要的是要意识到常规setInterval()在这里不起作用因为angular然后不知道值可能已经改变 - 可以使用$scope.apply()来修复,但文档是更好地解释为什么使用角度$interval服务仍然是一个更好的主意。