2014-02-08 303 views
0

我正在嘗試構建遊戲的用戶界面,而AngularJS似乎是完美的。我所有的遊戲都在全局變量ig之內。 ig看起來是這樣的:將全局變量添加到範圍

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

我想補充ig.moneyig.live到控制器的範圍,所以它會自動更新的用戶界面時,遊戲內的變量的變化。

我想:

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

,但它不工作。它說ig爲空。有人能指引我朝着正確的方向嗎?謝謝

回答

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

乾淨的方法是把所有的遊戲數據放在一個單身的Angular Service中。然後可以將數據的任何更改廣播到可以處理該事件的控制器。通過依賴注入,您可以讓所有控制器都可以輕鬆訪問遊戲數據。有一個偉大的blogpost,給出了一個關於如何做到這一點的直接例子。