我有以下服务:
myApp.service('myService', function(){
this.functionOne = function(){
return true;
};
this.functionTwo = function(){
// Call functionOne
};
});
我想从functionOne
调用functionTwo
,而不必重写服务的写入方式(在这种情况下,返回带有函数的对象)。
有没有办法使用this
格式提供功能?
答案 0 :(得分:1)
有多种方法可以做到这一点,但最安全的是只定义一个_this
变量。
myApp.service('myService', function(){
var _this = this;
this.functionOne = function(){
return true;
};
this.functionTwo = function(){
var x = _this.functionOne();
};
});
在这种情况下,变量_this
引用由AngularJS创建的myService
对象。
这里的问题是this
是一个可以赋值的JavaScript特殊变量。它不像其他语言那样工作。因此,除非您知道在执行闭包函数时this
变量将是什么,否则您应该使用您知道的安全变量。
答案 1 :(得分:0)
app.factory('myService', function() {
var firstFn = function() {
secondFn();
//some code
}
var secondFn = function() {
//additional code
}
return {
firstFn: firstFn;
}
})
此代码将firstFn公开给调用此服务的任何位置。当你调用firstFn时,它也会运行secondFn。注入此服务时,您可以使用myService.firstFn()
访问firstFn。希望有所帮助。
注意:我使用的是工厂而不是服务。这两者之间存在微妙但显着的差异。长话短说,工厂比你可以用它做什么更灵活。