将全局变量添加到范围

时间:2014-02-08 19:08:09

标签: angularjs

我正在尝试构建游戏的用户界面,而AngularJS似乎是完美的。我的所有游戏都在全局变量ig中。 ig看起来像这样:

ig = { money: 100, lives: 3, ... };

我想将ig.moneyig.live添加到控制器的范围内,因此当游戏中的变量发生变化时,它会自动更新UI。

我试过了:

$scope.$watch('ig.money', function() { $scope.money = ig.money; });

但它不起作用。它说ig为空。有人能指出我正确的方向吗?谢谢

3 个答案:

答案 0 :(得分:5)

或那将是更有棱角的方式:

app.value('myGame',ig)
app.controller('AppController',[
    '$scope',
    '$window',
    function($scope,myGame) {
      $scope.ig = myGame;
    }
]);

或者您可以将游戏置于常数或提供者或工厂或服务中

module

取决于您选择更适合您需求的方式

答案 1 :(得分:2)

尚不清楚您在何处以及如何定义全局变量。

假设您已将变量定义为

<script type="text/javascript">
    var ig = { money: 100, lives: 3, ... };
</script>

要在Angular控制器中访问这些变量,您必须将$window注入控制器以访问窗口绑定变量。

app.controller('AppController',[
    '$scope',
    '$window',
    function($scope, $window) {
      $scope.ig = $window.ig;
    }
]);

答案 2 :(得分:1)

一种干净的方法是将所有游戏数据放入一个单身的Angular服务中。然后,可以将对数据的任何更改广播给可以对该事件起作用的控制器。通过依赖注入,您可以使用所有控制器都可以轻松访问游戏数据来进行服务。有一个很棒的blogpost给出了一个如何做到这一点的简单例子。