2015-05-28 33 views
1

我在工厂AngularJS:如何在工厂内调用函数?

这里有两个作用是一些代码

.factory('getArticles', function ($http, $q) { 
    return { 
     abc : function() { 
     var deferred = $q.defer(); 
     // my code 
      res= this. bcd(); 
      console.log(res); // undefined 
      deferred.resolve(res); 

      return deferred.promise; 
     }, 
     bcd: function() { 

     //some codee 

     return res; 

     } 
    } 

}); 
从控制器我打电话ABC功能

,但现在当我在日志检查资源的价值。这显示未定义。

有什么想法?这个怎么做 ?

感谢

+0

可能是你不叫喜欢getArticles.abc(ABC功能),并把这种不纠正这种情况? – Mikalai

+0

我可以打电话给abc。 –

+0

我试着说,你可以在回调中传递getArticles.abc函数,并且可以在没有正确的上下文的情况下调用它。 – Mikalai

回答

0

是完全一样luschn先生说不过你可以通过改变如下定义调用来自控制器贵厂/服务功能。你应该定义功能在你的控制器工厂

.factory('getArticles', function ($http, $q) { 

     this.abc = function() { 
     var deferred = $q.defer(); 
     // my code 
      res= this. bcd(); 
      console.log(res); // undefined 
      deferred.resolve(res); 

      return deferred.promise; 
     } 

     this.bcd = function() { 

     //some codee 

     return res; 

     } 

}); 

this参考您可以通过

getArticles.abc() 

如果您需要从另一家工厂函数调用只是

this.bcd(); 
调用工厂的函数调用
0

总是把问题分开。

.factory('getArticles', function ($http, $q) { 

    function abc() { 
    var deferred = $q.defer(); 
    res= bcd(); 
    console.log(res); 
    deferred.resolve(res); 
    return deferred.promise; 
    } 

    function bcd() { 
    //some logic 
    //Make sure your logic is returning proper value. 
    return res; 
    } 


    //return only those functions you want to expose 
    return { 
    abc: abc 
    } 
}); 

在return语句中,您基本上只能公开那些您将使用的方法。

2

@ Vineet的答案对于实例化的服务是正确的,但工厂应该只返回一个对象。

我喜欢@ peek4y的答案,但它可以进一步提高,仍然有ABC()私营:

(function() { 
'use strict'; 

var getArticles = function ($http, $q) { 

    function bcd() { 
    var res; 
    // some logic 
    return res; 
    } 

    function abc() { 
    var deferred = $q.defer(); 
    var res = bcd(); 
    console.log(res); 
    deferred.resolve(res); 
    return deferred.promise; 
    } 

    //return only the functions you want to expose 

    return { 
    abc: function() { 
     return abc(); 
    } 
    } 
}); 

angular.module('myApp') 
    .factory('getArticles', getArticles); 

}()); 
相关问题