【问题标题】:Access nested function closures in angular factory在角度工厂中访问嵌套函数闭包
【发布时间】:2015-06-12 12:47:28
【问题描述】:

我试图访问一个工厂内的嵌套函数,我将它注入到 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();
    }
}());

【问题讨论】:

    标签: javascript angularjs nested closures angular-services


    【解决方案1】:

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

    (function () {
    'use strict';
    
    angular
        .module('myModule')
        .controller('myController', myController);
    
        function myController(myFactory) {
    
            myFactory.foobar().foo();
        }
    }());
    

    【讨论】:

    • 在这里使用service 而不是factory 会更好吗?也许它会更优雅......
    • 看,使用服务和工厂的区别在于,如果你使用工厂,当你注入工厂时,angular会调用工厂函数并将结果返回给你,即 foob​​ar 对象在这种情况下。但是,如果您使用服务并将其注入某个位置,您将获得该函数的新实例,即 new myFactory()
    • 此链接将非常有助于您决定应该遵循哪种设计模式stackoverflow.com/questions/15666048/…
    【解决方案2】:

    试试看:

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

    这是它的预期使用方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-04
      • 2015-10-25
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多