我对角度js的工厂目录有一个疑问。
假设这是fact1目录。我想在funct2方法中调用funct1方法。
app.factory("fact1",function(){
return{
funct1:function(){
//some code here
},funct2:function(){
//some code here
// call here funct1()
}
}
});
首先告诉我这是否有可能? 如果可能的话我怎么能在funct2方法中调用funct1方法。
答案 0 :(得分:13)
为什么不这样做:
app.factory("fact1",function(){
function funct1 () {
// Do some code...
}
function funct2 () {
// Do some code...
funct1();
}
return{
funct1: funct1,
funct2: funct2
};
});
我个人发现这种方式比存储返回对象中的每个函数更有用/可读。此外,我不是在我的返回对象中使用this
的忠实粉丝。
答案 1 :(得分:11)
当然可以。这只是普通的javascript对象用法:
return {
funct1: function () {
//some code here
},
funct2: function () {
//some code here
this.funct1();
}
}
<强> UPD 即可。评论中有一点混乱,认为它不起作用。但是,您需要了解它是非常重要的如何 funct2
方法。也就是说,方法不应该与它的基础对象分离,否则this
上下文将是不同的,this.funct1()
将指向错误的(通常不存在的)方法。松散上下文的常用方法:
$('.something').on('click', obj.funct2);
在上文中,obj.funct2
this
将成为HTML元素对象,而不再是obj
。但是,以下版本将正常工作:
// use anonymous function
$('.something').on('click', function() { obj.funct2() });
// bind explicitly to context
$('.something').on('click', obj.funct2.bind(obj));
了解MDN文章非常重要:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
答案 2 :(得分:2)
您可以执行以下操作,而不是直接在工厂返回:
app.factory("fact1",function(){
var obj = {};
obj.funct1 = function(){
//some code here
}
obj.funct2 = function(){
//some code here
// call here funct1()
obj.funct1();/* calling the funct1 */
}
return obj;
});
这应该适合你。