也许我错误地使用了角度工厂,但是我以面向对象的方式编写代码来创建我需要的东西,并且我试图弄清楚如何传递创建的东西控制器之间的对象。
我知道工厂是"单身",所以将工厂注入每个控制器都可以完成这项任务。但是,如果我向你展示我的代码,我的困惑会更加清晰。
在services.js
中.factory('Game', function () {
var Game = function (name, description) {
this.name = name;
this.description = description;
this.rating = 0;
this.rooms = [];
}
return Game;
})
所以在这里我定义了#34; Game"的构造函数。对象
在我的controllers.js中,我创建了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];
})
我注入"游戏"工厂进入控制器,并定义两个" Game"具有" new"的对象关键词。两个问题出现了...... 1)当我可以创建多个对象时,工厂如何成为单身人士? 2)如何将game1和game2传递给另一个控制器?
也许我对angularjs中的面向对象编程感到困惑,并且错误地创建了我的游戏对象。
请帮忙!
编辑:我认为一个简单的解决方案是使用$ rootScope来保存数据对象,但我不认为这是做事的标准方法吗?似乎开发人员敦促避免使用rootScope ..
答案 0 :(得分: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...