Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在angular factory中访问嵌套函数闭包_Javascript_Angularjs_Nested_Closures_Angular Services - Fatal编程技术网

Javascript 在angular factory中访问嵌套函数闭包

Javascript 在angular factory中访问嵌套函数闭包,javascript,angularjs,nested,closures,angular-services,Javascript,Angularjs,Nested,Closures,Angular Services,我试图访问工厂中的嵌套函数,我将其注入AngularJS中的控制器,但只得到一个“函数未定义”错误。我认为控制器甚至无法访问内部功能。为什么? 这是合法的JavaScript吗 服务 (function () { 'use strict'; angular .module('myModule', []) .factory('myFactory', myFactory); function myFactory() { va

我试图访问工厂中的嵌套函数,我将其注入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();
    }
}());
试试看:

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

这是它的预期使用方式。

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

(function () {
'use strict';

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

    function myController(myFactory) {

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

在这里使用
服务
是否比使用
工厂
更好?也许它会更优雅…看,使用服务和工厂的区别在于,如果您使用工厂,并且当您注入该工厂时,angular将调用工厂函数并将结果返回给您,在这种情况下,即foobar对象。但是,如果您使用某个服务并将其注入到某个位置,则将为您提供一个新的函数实例,即new myFactory()。此链接将非常有助于您决定应遵循哪种设计模式