我使用AngularJS定义了以下服务:
myApp.factory('utilitiesService',
function ($filter) {
return {
myFuncA: function (inArg) {
return "XXXX";
},
myFuncB: function (inObj) {
inObj.c = "CCCC";
inObj.d = "dddd";
inObj.newFunc = function() {
return utilitiesService.myFuncA(
this.c,
this.d
);
};
return inObj;
}
};
}
);
在此服务之外,我可以通过注入myFuncA()
然后只需执行utilitiesService
utilitiesService.myFuncA("blah blah blah");
但是以同样的方式调用myFuncB()
会失败,因为它说它不知道utilitiesService
。那么如何从myFuncA()
的{{1}}中访问myFuncB()
?
请注意,我无法在inObj.newFunc()
的定义中将utilitiesService
引用为this
,因为在该背景下,newFunc()
为this
。
答案 0 :(得分:4)
更新
myApp.factory('utilitiesService',
function($filter) {
return {
myFuncA: function(inArg) {
return "XXXX";
},
myFuncB: function(inObj) {
var that = this;
inObj.c = "CCCC";
inObj.d = "dddd";
inObj.newFunc = function() {
return that.myFuncA(
this.c,
this.d
);
};
return inObj;
}
};
}
);
myApp.factory('utilitiesService',
function($filter) {
function myFuncA(inArg) {
return "XXXX";
};
function myFuncB(inObj) {
inObj.c = "CCCC";
inObj.d = "dddd";
inObj.newFunc = function() {
return myFuncA(
this.c,
this.d
);
};
return inObj;
}
return {
myFuncA: myFuncA,
myFuncB: myFuncB
}
});
你可以这样做:
myApp.factory('utilitiesService',
function($filter) {
return {
myFuncA: function(inArg) {
return ("XXXX" + inArg);
},
myFuncB: function(inArg) {
return ("YYYY" + this.myFuncA(inArg));
}
};
}
);
或者如果这些功能不依赖于上下文:
myApp.factory('utilitiesService',
function($filter) {
function myFuncA(inArg) {
return ("XXXX" + inArg);
}
function myFuncB(inArg) {
return ("YYYY" + myFuncA(inArg));
}
return {
myFuncA: myFuncA,
myFuncB: myFuncB
};
});
答案 1 :(得分:2)
这是一种方法:
myApp.factory('utilitiesService',
function ($filter) {
service = {};
service.myFuncA = function (inArg) {
return ("XXXX" + inArg);
};
service.myFuncB = function (inObj) {
inObj.c = "CCCC";
inObj.d = "dddd";
inObj.newFunc = function() {
return service.myFuncA(
this.c,
this.d
);
};
return inObj;
};
return service;
}
);
答案 2 :(得分:0)
myApp.factory('utilitiesService',
function () {
return {
myFuncA: myFuncA,
myFuncB: myFuncB
};
function myFuncA(inArg) {
return "XXXX";
}
function myFuncB(inObj) {
inObj.c = "CCCC";
inObj.d = "dddd";
inObj.newFuncVal = function () {
return myFuncA(this.c, this.d);
};
return inObj;
}
}
);