我在这个主题上看过几件事情,但要么他们没有真正回答我的问题,要么我太密集了,无法应用于我的情况。我有一个我一直在玩的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指出的那样,获取我需要的数据非常简单,但我仍然不明白如何不断更新。我读过的教程让它看起来像是自动发生的。
答案 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
服务仍然是一个更好的主意。