Javascript 在angular factory中访问嵌套函数闭包
我试图访问工厂中的嵌套函数,我将其注入AngularJS中的控制器,但只得到一个“函数未定义”错误。我认为控制器甚至无法访问内部功能。为什么? 这是合法的JavaScript吗 服务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
(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()。此链接将非常有助于您决定应遵循哪种设计模式