动态变化的角度全局值

时间:2014-12-16 23:03:53

标签: javascript angularjs angular-services

我似乎无法搜索正确的条款。我已经阅读了很多东西,找不到我想做的事情。我确信有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的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

你的主要问题是你正在使用标准的浏览器setTimeout函数,该函数完全没有角度 - 因此,角度永远不会发现代码修改了该值并且从不触发摘要周期。

最佳选择是在您的示例中使用$timeout服务而不是setTimeout。 或者,您可以在超时功能中使用$scope.$apply()强制角度触发摘要周期并更新显示。

此外,在Angular中,存在一个$rootScope对象(通过依赖注入进行访问,就像$scope一样),所有范围都继承自。{如果这是您真正需要做的事情,那么这是存储全局变量的最佳位置(不过标准建议,一如既往可以避免全局变量)。