访问角度工厂中的嵌套函数闭包

时间:2015-06-12 12:47:28

标签: javascript angularjs nested closures angular-services

我正在尝试访问我在AngularJS中注入控制器的工厂内的嵌套函数,但只是得到'函数未定义'错误。我认为控制器甚至无法访问内部功能。为什么? 这甚至是合法的JavaScript吗?

服务

(function () {
    'use strict';

    angular
        .module('myModule', [])
        .factory('myFactory', myFactory);

    function myFactory() {
        var outerVar = 0;

        function foobar() {
            var innerVar;

            function foo() {
                innerVar = outerVar++;
                console.log(innerVar);
            }

            function bar() {
                innerVar = outerVar--;
                console.log(innerVar);
            }

            return {
                foo: foo,
                bar: bar
            }
        }

        return {
            foobar: foobar
        }
    }
}());

控制器

(function () {
    'use strict';

    angular
        .module('myModule')
        .controller('myController', myController);

    function myController(myFactory) {

        myFactory.foobar.foo();
    }
}());

2 个答案:

答案 0 :(得分:1)

试试吧:

myFactory.foobar().foo();
myFactory.foobar().bar();

这是打算使用它的方式。

答案 1 :(得分:1)

你必须调用foobar函数,然后它将返回所需的对象

(function () {
'use strict';

angular
    .module('myModule')
    .controller('myController', myController);

    function myController(myFactory) {

        myFactory.foobar().foo();
    }
}());