Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs控制器中用作计数器的静态javascript变量_Javascript_Angularjs_Static Variables - Fatal编程技术网

Angularjs控制器中用作计数器的静态javascript变量

Angularjs控制器中用作计数器的静态javascript变量,javascript,angularjs,static-variables,Javascript,Angularjs,Static Variables,我想创建一个静态javascript变量,用作Angularjs控制器内的计数器。此静态变量将在轮询函数中使用,该函数将被重复调用 我希望以如下方式使用静态变量: var polling_func = function() { static var counter = 0; if (counter == 10) { alert('Do action'); counter = 0; } counter = counter +

我想创建一个静态javascript变量,用作Angularjs控制器内的计数器。此静态变量将在轮询函数中使用,该函数将被重复调用

我希望以如下方式使用静态变量:

var polling_func = function()
{
    static var counter = 0;

    if (counter == 10)
    {
        alert('Do action');
        counter = 0;
    }
    counter = counter + 1;
    $timeout(polling_func, 1000);
}
polling_func();

不幸的是,我不能在javascript中使用static关键字声明静态变量。我应该如何在代码中这样做呢?

为什么不声明一个全局变量,这样在调用函数时它就不会更改值

 var counter = 0;
var polling_func = function()
{


    if (counter == 10)
    {
        alert('Do action');
        counter = 0;
    }
    counter = counter + 1;
}
polling_func();
$timeout(polling_func, 1000);

我认为@Naeem Shaikh的答案是最简单的,而且是纯JS

但是,既然您标记了angular,那么有一种更像angular的方法:使用服务

app.factory('Counter',function() {
  return {c:0};
});
然后在控制器(或多个控制器)中:

工厂/服务是长寿命的,在短命的控制器之间传递方法和变量

如果您只需要像这里这样的一个var(即没有方法),那么有一个简写:

app.value('Counter',{counter:0});

然后以同样的方式在控制器中使用它。

您的解决方案听起来如此简单可行,以至于我觉得自己像个白痴:)被否决了。但这并不能完全回答我的问题。我还是投了反对票。。无论如何,我会解释,这个答案正是op所需要的,他问是否有可能创建一个静态变量,这就是我的答案。解释如何为计数器创建服务超出此问题的范围。:)嗯,我是OP,我投了更高的票。我喜欢这个简单的解决方案。尽管我也提供了另一个解决方案,但我还是投了赞成票!我很少投反对票,除非它真的太离谱了。我仍然喜欢简单的解决方案,因为我能做到。选择您的答案作为答案。在Angular中,服务是单例的。因此,您可以为任何控制器创建执行此操作的
反服务。那么,计数器可能是服务范围的一部分。这个答案非常符合角度要求。。尼斯:)我记得在我学习Perl的早期,我学到的第一件事是,“每件事都有多种方法来做,而且多种方法都同样有效。”虽然你的答案更正确,因为它更恰当地回答了我的问题,但我更喜欢Naeem Shaikh的答案,因为这是我能做的。对不起,不要道歉!你选择最好的一个,如果你有两个,但其中一个更适合你,选择一个最好的答案,然后投票给其他人。通过在此处回答,其他处于不同情况的人可能可以使用它。:-)
app.value('Counter',{counter:0});