如何将动态变量传递给setInterval方法

时间:2019-03-25 18:28:24

标签: javascript angularjs

我想每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) 

});

2 个答案:

答案 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