Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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
Javascript AngularJS:如何创建更新自身的应用程序范围变量_Javascript_Angularjs_Angularjs Service - Fatal编程技术网

Javascript AngularJS:如何创建更新自身的应用程序范围变量

Javascript AngularJS:如何创建更新自身的应用程序范围变量,javascript,angularjs,angularjs-service,Javascript,Angularjs,Angularjs Service,我正在开发一个小型游戏/模拟应用程序,我需要一个应用程序范围内的时间变量来自我更新。 它也可以是一个数字变量,我关心的是它一直在增加,例如,每秒0..1..2..3..4来表示此模拟应用程序中的时间进度。(这不必是JavaScript日期对象本身) 我希望它在我注入的每个控制器/服务中都可以访问,并在整个应用程序中自动更新。其他依赖于此时间变量的范围变量将自动更新为AngularJS提供的所有双向绑定特性 这是AngularJS应用程序开发理念中的一条“法律”路线吗?如果是,那么如何构建它的最佳

我正在开发一个小型游戏/模拟应用程序,我需要一个应用程序范围内的时间变量来自我更新。 它也可以是一个数字变量,我关心的是它一直在增加,例如,每秒0..1..2..3..4来表示此模拟应用程序中的时间进度。(这不必是JavaScript日期对象本身)

我希望它在我注入的每个控制器/服务中都可以访问,并在整个应用程序中自动更新。其他依赖于此时间变量的范围变量将自动更新为AngularJS提供的所有双向绑定特性


这是AngularJS应用程序开发理念中的一条“法律”路线吗?如果是,那么如何构建它的最佳方式是什么?

当我正确理解您的问题时,您将搜索$rootScope。 在每个控制器/指令/服务中,包括根范围,您可以全局抛出内容


当我正确理解您的问题时,您将搜索$rootScope。 在每个控制器/指令/服务中,包括根范围,您可以全局抛出内容


您可以为需要的任何地方都可以注入的服务构建一个特殊的服务,也可以将其放在
$rootScope
上。通常,您应该避免将内容放在
$rootScope
上,因为全局状态通常是一种代码味道。然而,如果这真的是你在你的情况下需要的,那么这可能适合你的需要

您可以简单地将该代码放在
run
块上,以便在加载模块后立即执行它

myModule.run(['$rootScope', function($rootScope){
    setInterval(function(){
        $rootScope.now = new Date().getTime();
    }, 1000)
}]}
请注意,按照我编写上述代码的方式,Angular不会收到关于该更改的通知。但是,每秒钟通知Angular有关该更改的信息可能不是您想要的,因为这可能会导致严重的性能问题。澄清一下:如果您希望Angular收到更改通知并更新所有绑定,那么变量更新需要包装在
$apply
调用中

myModule.run(['$rootScope', function($rootScope){
    setInterval(function(){
        $rootScope.$apply(function(){
            $rootScope.now = new Date().getTime();
        });
    }, 1000)
}]}

还要注意的是,由于处理之间的时间可能是不确定的,因此您希望避免的大部分时间
setInterval
。大多数时间
setTimeout
更适合。深入研究这个问题超出了这个答案的范围,但是如果你想了解这个主题,我建议你阅读John Resig关于这个主题的文章:

你可以为这个主题构建一个特殊的服务,它可以被注入到任何需要的地方,或者你只需要把它放在
$rootScope
上。通常,您应该避免将内容放在
$rootScope
上,因为全局状态通常是一种代码味道。然而,如果这真的是你在你的情况下需要的,那么这可能适合你的需要

您可以简单地将该代码放在
run
块上,以便在加载模块后立即执行它

myModule.run(['$rootScope', function($rootScope){
    setInterval(function(){
        $rootScope.now = new Date().getTime();
    }, 1000)
}]}
请注意,按照我编写上述代码的方式,Angular不会收到关于该更改的通知。但是,每秒钟通知Angular有关该更改的信息可能不是您想要的,因为这可能会导致严重的性能问题。澄清一下:如果您希望Angular收到更改通知并更新所有绑定,那么变量更新需要包装在
$apply
调用中

myModule.run(['$rootScope', function($rootScope){
    setInterval(function(){
        $rootScope.$apply(function(){
            $rootScope.now = new Date().getTime();
        });
    }, 1000)
}]}

还要注意的是,由于处理之间的时间可能是不确定的,因此您希望避免的大部分时间
setInterval
。大多数时间
setTimeout
更适合。深入研究这个问题超出了这个答案的范围,但是如果你想了解这个主题,我建议你阅读John Resig关于这个主题的文章:

如果可能的话,应该避免对全局变量使用
$rootScope

更好的解决方案是使用工厂/服务,您可以将其注入任何需要的组件中


有关更多详细信息,请参见,如果可能,应避免使用全局变量的
$rootScope

更好的解决方案是使用工厂/服务,您可以将其注入任何需要的组件中


查看了解更多详细信息

听起来设置cookie可能是你的最佳选择听起来设置cookie可能是你的最佳选择好吧,这就是你存储值的地方,但是你会在哪里构建每秒钟更新和增加的功能?好吧,这就是你存储值的地方,但是,您将在哪里构建每秒钟更新和增加一次的功能呢?