Javascript AngularJS:如何创建更新自身的应用程序范围变量
我正在开发一个小型游戏/模拟应用程序,我需要一个应用程序范围内的时间变量来自我更新。 它也可以是一个数字变量,我关心的是它一直在增加,例如,每秒0..1..2..3..4来表示此模拟应用程序中的时间进度。(这不必是JavaScript日期对象本身) 我希望它在我注入的每个控制器/服务中都可以访问,并在整个应用程序中自动更新。其他依赖于此时间变量的范围变量将自动更新为AngularJS提供的所有双向绑定特性Javascript AngularJS:如何创建更新自身的应用程序范围变量,javascript,angularjs,angularjs-service,Javascript,Angularjs,Angularjs Service,我正在开发一个小型游戏/模拟应用程序,我需要一个应用程序范围内的时间变量来自我更新。 它也可以是一个数字变量,我关心的是它一直在增加,例如,每秒0..1..2..3..4来表示此模拟应用程序中的时间进度。(这不必是JavaScript日期对象本身) 我希望它在我注入的每个控制器/服务中都可以访问,并在整个应用程序中自动更新。其他依赖于此时间变量的范围变量将自动更新为AngularJS提供的所有双向绑定特性 这是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可能是你的最佳选择好吧,这就是你存储值的地方,但是你会在哪里构建每秒钟更新和增加的功能?好吧,这就是你存储值的地方,但是,您将在哪里构建每秒钟更新和增加一次的功能呢?