我想每30秒刷新/重新加载该方法一次。但是我无法将变量数据发送到另一个函数,即setInterval。如何在setInterval方法中传递变量。在添加静态变量的同时,如何将id传递给setInterval方法
var app = angular.module('PIR_Detection', []);
app.controller('myCtrl', function ($scope, $http, $window) {
$scope.sel_val = 0;
$scope.DefaultLabel = "Loading.....";
var post = $http({
method: "get",
url: "../data.json",
dataType: 'json',
data: {},
headers: { "Content-Type": "application/json" }
});
post.success(function (data, status) {
$scope.Customers = data;
});
post.error(function (data, status) {
});
$scope.getPIRData = function (id) {
var url = "/PIRDetails/GetPIRStatus/" + id;
$http.get(url)
.then(function (response) {
$scope.myWelcome = response.data;
$scope.pirstatus = base64toHEX($scope.myWelcome.dataFrame);
$scope.timestamp = getIST (response.data.timestamp);
$scope.rssi = response.data.rssi;
deviceid = id;
});
};
setInterval(function () {
$scope.getPIRData("100010102");//unable to pass id here
}, 30000)
});
答案 0 :(得分:0)
由@tvanfosson提供:
您可能想拥有一个为您创建间隔计时器的功能。将参数传递给函数,以便其值在函数闭包中捕获并在计时器到期时保留。
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
然后将其称为createInterval(funca,dynamicValue,500);
显然,您可以将其扩展为多个参数。并且,请使用更具描述性的变量名称。 :)
答案 1 :(得分:0)
您可以通过多种方式进行操作
示例:
//set data
window.deviceId=Id
并在settimout中使用它
setInterval(function () {
$scope.getPIRData(window.deviceId);//unable to pass id here
}, 30000)
但是您可以声明settimeout外部作用域的任何全局变量,然后该变量将在settimeout回调函数中可用,因为那样会将其视为Closures