使用 Spark REST API 和 AngularJS

Consuming Spark REST API with AngularJS

我已经看到了一些关于这个主题的东西,但要么它们没有真正回答我的问题,要么我太笨以至于无法将它们应用到我的情况中。我有一个我一直在玩的 Spark Core,它目前连接到一个光传感器并将该数据发布到具有 RESTful API 的 Spark 云。我正在尝试使用 AngularJS 使用该数据,但我有两个无法解决的问题。首先是我希望数据不断更新。第二个是提取我想要的精确信息。 API 调用 returns:

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

我想要来自 "result" 的数据。到目前为止,我正在尝试:

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>

我得到:

The light level is {"cmd":"VarReturn","name":"light","result":39.8095238095238,"coreInfo":{"last_app":"","last_heard":"2015-02-15T02:09:34.483Z","connected":true,"deviceID":"51ff70065082554913470887"}}

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

编辑:

正如 mnemosyn 指出的那样,获取我需要的数据真的很容易,但我仍然不明白如何持续更新。我读过的教程让它看起来像是自动发生的。

不确定我是否找到你,但不会

<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 不知道值可能已更改 - 这可以通过使用 [=15= 来修复],但文档更好地解释了为什么使用 angular $interval 服务仍然是更好的主意。