AngularJS - 自我引用服务?

时间:2014-01-07 21:22:46

标签: angularjs angularjs-service

我正在构建一个Angular应用程序,它将拥有一个顶级控制器和一个二级控制器。将有n个二级控制器,但我想把全局级函数放在某个地方。我在服务中这样做。

我开始创建一个返回api的单个服务的路径,真的,包含很多功能(下面)。该服务返回一个具有两个属性分支的对象,每个属性分支包含一组函数。我如何从另一个中调用其中一个?

globalModule.factory('global', function($http) {

    var squares = MyApp.squares;  // this is the *only* link from Global namespace to this app

    return {
        squareMgr: {
            getSquaresEarned: function() {
                return squares.earned;
            },
            getSquaresPlaced: function() {
                return squares.placed;
            },
            setThisSquareEarned: function(value) {
                squares.earned.push(value);
            },
            setThisSquarePlaced: function(value) {
                squares.placed.push(value);
            }
        },
        missionMgr: {
            missionInfo: {},
            setMissionInfo: function(missionInfo) {
                this.missionInfo = missionInfo
            },
            complete: function(missionData) {

                log('complete called on video at ' + new Date());
                missionData.complete = true;
                log(angular.toJson(missionData));

                $http({
                    url: '/show/completeMission',
                    method: "POST",
                    data: missionData 
                })
                .then(function(response) {
                    if (response.data.success === true) {

                        log('completeMission success');

                        // increment squares earned counter
                        this.squareMgr.setThisSquareEarned(missionData.id);

                        // above is an attempt to run a function contained in this 
                        // same service in a different parent property branch.
                        // how *should* I do this?
                    }
                });
            }
        }
    }
});

1 个答案:

答案 0 :(得分:13)

这样的事情怎么样:

globalModule.factory('global', function($http) {

    var glob = {
        squareMgr: {
           // ...
        },
        missionMgr: {
          foo: function() {
            glob.squareMgr.xyz(); 
          }

        }
    };

    return glob;
});