2017-01-13 9 views
0

おそらく私は角度のあるファクトリを間違って使用していますが、オブジェクト指向の方法でコードを作成して、必要なものを作成しています。コントローラ間のオブジェクト。ファンクション間でファクトリオブジェクトを渡すAngularjs

工場は "シングルトン"なので、工場に各コントローラーを注入するのは当然です。しかし、自分のコードを表示すると、私の混乱はより明確になります。 services.js

.factory('Game', function() { 
    var Game = function (name, description) { 
     this.name = name; 
     this.description = description; 
     this.rating = 0; 
     this.rooms = []; 
    } 

    return Game; 
}) 

だからここで私は "ゲーム" オブジェクトのコンストラクタを定義します。

そして、私は2つのテストゲームは

.controller('CreateCtrl', function ($scope, Game) { 
    var game1 = new Game("Test Adventure!", "An amazing adventure to do some cool things and such!"); 
    var game2 = new Game("Test Adventure 2!", "An amazing adventure to do some cool things and such!"); 

    $scope.games = [game1, game2]; 
}) 

私はコントローラに「ゲーム」の工場を注入し、「新しい」キーワードを持つ2つの「ゲーム」オブジェクトを定義するオブジェクトを作成、私のcontrollers.js、インチ2つの質問が出てきます。1)複数のオブジェクトを作成することができたら、工場はどのようにシングルトンですか?そして2)ゲーム1とゲーム2の両方を別のコントローラーに渡すにはどうすればいいですか?

多分私はangularjsのオブジェクト指向プログラミングと混同されていて、私のゲームオブジェクトを間違って作成しています。

助けてください!

編集:私は単純な解決策は、データオブジェクトを保持するために$ rootScopeを使用することだと思うが、これは標準的なやり方ではないと思いますか?開発者はrootScopeの使用を避けるよう促しているようです。

答えて

1

私はあなたが管理したいと思う実際のデータクラスで工場/サービス(データマネージャー)を誤解していると思います。マネージャは、理想的には、公開されている関数またはそれが公開するデータを表すオブジェクトを返さなければなりません。ここで例えば

.factory('GameManager', function() { 
    var _games = []; 

    var Game = function (name, description) { 
     this.name = name; 
     this.description = description; 
     this.rating = 0; 
     this.rooms = []; 
    }; 

    function createGame(name, description) { 
     _games.push(new Game(name, description)); 
    } 

    return { 
     games: _games, 
     createGame: createGame 
    }; 
}); 

コントローラである:

GameManager.createGame('asdf', 'asdf');

又は

GameManager.games...

+0

これは感覚のトンになります。私はそれを私の頭の周りに包み込もうとしていましたが、何らかの理由で工場がデータ管理者であるという関係を作っていませんでした!私はオブジェクトを作成することができますJava/C + +の背景から来る混乱は、コンテキストに意味をなさない! – awbasham

関連する問題