我正在尝试构建游戏的用户界面,而AngularJS似乎是完美的。我的所有游戏都在全局变量ig
中。 ig
看起来像这样:
ig = { money: 100, lives: 3, ... };
我想将ig.money
和ig.live
添加到控制器的范围内,因此当游戏中的变量发生变化时,它会自动更新UI。
我试过了:
$scope.$watch('ig.money', function() { $scope.money = ig.money; });
但它不起作用。它说ig
为空。有人能指出我正确的方向吗?谢谢
答案 0 :(得分:5)
或那将是更有棱角的方式:
app.value('myGame',ig)
app.controller('AppController',[
'$scope',
'$window',
function($scope,myGame) {
$scope.ig = myGame;
}
]);
或者您可以将游戏置于常数或提供者或工厂或服务中
取决于您选择更适合您需求的方式
答案 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给出了一个如何做到这一点的简单例子。