Angularjs在控制器之间传递工厂对象

时间:2017-01-13 18:04:53

标签: javascript angularjs ionic-framework

也许我错误地使用了角度工厂,但是我以面向对象的方式编写代码来创建我需要的东西,并且我试图弄清楚如何传递创建的东西控制器之间的对象。

我知道工厂是"单身",所以将工厂注入每个控制器都可以完成这项任务。但是,如果我向你展示我的代码,我的困惑会更加清晰。

在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 ..

1 个答案:

答案 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...