工厂方法内部的功能可以通信

时间:2014-01-06 19:13:54

标签: angularjs

我对角度js的工厂目录有一个疑问。

假设这是fact1目录。我想在funct2方法中调用funct1方法。

app.factory("fact1",function(){
  return{
     funct1:function(){
        //some code here
     },funct2:function(){
      //some code here
      // call here funct1()
     }
   }
 }); 

首先告诉我这是否有可能? 如果可能的话我怎么能在funct2方法中调用funct1方法。

3 个答案:

答案 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;

 }); 

这应该适合你。