我似乎无法搜索正确的条款。我已经阅读了很多东西,找不到我想做的事情。我确信有angular way
这样做,我在文档中没有读过。
我想创建一个全球价值或服务......类似于
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的正确方法是什么?
答案 0 :(得分:4)
你的主要问题是你正在使用标准的浏览器setTimeout函数,该函数完全没有角度 - 因此,角度永远不会发现代码修改了该值并且从不触发摘要周期。
最佳选择是在您的示例中使用$timeout
服务而不是setTimeout
。
或者,您可以在超时功能中使用$scope.$apply()
强制角度触发摘要周期并更新显示。
此外,在Angular中,存在一个$rootScope
对象(通过依赖注入进行访问,就像$scope
一样),所有范围都继承自。{如果这是您真正需要做的事情,那么这是存储全局变量的最佳位置(不过标准建议,一如既往可以避免全局变量)。