2014-02-08 11 views
0

Я пытаюсь создать пользовательский интерфейс игры, и AngularJS кажется идеальным в этом отношении. Вся моя игра находится внутри глобальной переменной ig. ig выглядит следующим образом:Добавить глобальную переменную в область

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

Я хотел бы добавить ig.money и ig.live в сферу действия контроллера, поэтому он автоматически обновляет интерфейс, когда переменные изменения в игре.

Я пробовал:

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

, но он не работает. В нем говорится, что ig имеет значение null. Может ли кто-нибудь указать мне в правильном направлении? Спасибо

ответ

2

Непонятно, где и как вы определили свою глобальную переменную.

Предполагая, что вы определили переменный, как

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

Для доступа к этим переменным в угловом контроллере вы должны вводить $window в контроллер для доступа к оконному переплету переменных.

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

Это не работает в моей игре, но я работаю над простым тестом, который я сделал: http://jsfiddle.net/X374y/. В моей игре шаблон обновляется только тогда, когда я вызываю функцию test(). Я исследую это, но ваш ответ действительно. Спасибо! – doobdargent

+0

Мне удалось воспроизвести то, что происходит в моей игре: http://jsfiddle.net/L5AB9/. На этот раз деньги не обновляются каким-либо угловым методом (например, моя игра). И я должен нажать кнопку TEST для обновления шаблона. Есть идеи? – doobdargent

5

или что будет более угловатыми образом:

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

или вы могли бы поставить свою игру в постоянной или поставщика или завода или услуги

module

это до вас выбор, который лучше подходит вашим потребностям

1

Чистый способ поместите все свои игровые данные в Угловую службу, которая является синглом. Любые изменения в данных могут быть переданы контроллерам, которые могут воздействовать на это событие. Через инъекцию зависимостей вы можете сделать вашу службу с игровыми данными легко доступными для всех контроллеров. Существует отличный blogpost, который дает простой пример того, как это сделать.

Смежные вопросы