Javascript 动态变化的角度全局值
我似乎找不到合适的词。我读了一大堆东西,找不到我想做的事。我确信有一种方法是有角度的,我在文档中没有读过 我想创造一个全球性的价值或服务…比如Javascript 动态变化的角度全局值,javascript,angularjs,angular-services,Javascript,Angularjs,Angular Services,我似乎找不到合适的词。我读了一大堆东西,找不到我想做的事。我确信有一种方法是有角度的,我在文档中没有读过 我想创造一个全球性的价值或服务…比如 main.value 'settings', (-> data = testing: 'teset' setTimeout -> data.testing = 'what' console.log('from settings', data) , 5000 r
main.value 'settings', (->
data =
testing: 'teset'
setTimeout ->
data.testing = 'what'
console.log('from settings', data)
, 5000
return data
)()
在一个实际示例中,将使用pubsubs而不是超时来更新这些值
我也试着用工厂和服务来做这件事,但都是一样的
我的控制器可能看起来像这样
main.controller('somecontroller', ['$scope', 'settings',
($scope, settings)->
$scope.test = settings.testing
$scope.$watch settings.testing, ->
console.log 'here we ', settings
$scope.test = settings.testing
我希望能够使用动态变化的全局模型来使用控制器更新视图
使用Angular的正确方法是什么?您这里的主要问题是,您使用的是标准的浏览器setTimeout函数,它完全没有Angular功能,因此Angular永远不会检测到您的代码修改了该值,也永远不会触发摘要循环 最好的选择是使用
$timeout
服务,而不是示例中的setTimeout
。
或者,您可以在超时函数中使用$scope.$apply()
,强制angular触发摘要循环并更新显示
此外,在Angular中,存在一个
$rootScope
对象(通过依赖注入进行访问,就像$scope
),所有作用域都从该对象继承。如果您确实需要存储全局变量,那么这是存储全局变量的最佳位置(不过,标准建议始终是尽可能避免使用全局变量)。您这里的主要问题是您使用的是标准浏览器setTimeout函数,这会完全耗尽angular—因此angular不会拾取代码修改的值,也不会触发摘要循环
最好的选择是使用$timeout
服务,而不是示例中的setTimeout
。
或者,您可以在超时函数中使用$scope.$apply()
,强制angular触发摘要循环并更新显示
此外,在Angular中,存在一个
$rootScope
对象(通过依赖注入进行访问,就像$scope
),所有作用域都从该对象继承。如果您确实需要存储全局变量,那么这是存储全局变量的最佳位置(不过,标准建议是尽可能避免使用全局变量)。我的问题是,我如何拥有服务,更新服务返回的数据,并通知使用它的控制器更新?我不在乎超时,这是我想做的一个例子。如果我可以像我想做的那样使用服务,我不需要使用$rootScope。这回答了我的问题我的问题是,我如何拥有服务,更新服务返回的数据,并通知使用它的控制器更新?我不在乎超时,这是我想做的一个例子。我不需要使用$rootScope,如果我可以像我想做的那样使用服务,这就回答了我的问题