如何使用我在当前工厂中定义的方法?

时间:2015-08-10 00:10:22

标签: angularjs angularjs-factory

我有一个我正在工作的工厂,它引用了工厂返回的对象中定义的方法。当我提醒他们或者console.log时,这些方法都是未定义的。有没有办法引用同一工厂中定义的方法?换句话说,有没有办法实现我在下面说明的内容?

angular.module('myModule').factory('myFactory', ['$window', '$q', '$rootScope', '$http', function($window, $q, $rootScope, $http) {

  return {
    method1: function () {
       return 1;
    },
    {
    method2: function () {
       return this.method1 + 1;
    }
}]);

2 个答案:

答案 0 :(得分:2)

由于javascript的功能提升,您可以编写以下内容:

angular.module('myModule').factory('myFactory', ['$window', '$q', '$rootScope', '$http', function($window, $q, $rootScope, $http) {

  return {
    method1: method1,    
    method2: method2
    };

    function method1(){
        return 1;
    }

    function method2() {
        return method1() + 1;
    }

}]);

这是我喜欢使用的模式,因为它非常清楚哪些是公开的功能,什么是内部细节。

例如,您可以拥有一个私密的'其他人使用的功能,但不会被服务公开。非常方便。

angular.module('myModule').factory('myFactory', ['$window', '$q', '$rootScope', '$http', function($window, $q, $rootScope, $http) {

  return {
    method1: method1,    
    method2: method2
    };

    function method1(){
        return 1 + privateMethod1();
    }

    function method2() {
        return method1() + 1;
    }

    // Not returned by service, so private.
    function privateMethod1() {
        return 3;
    }
}]);

可以在http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html找到一篇好的,全面的文章,希望能为您提供进一步的见解。

答案 1 :(得分:1)

我建议你这样做。

angular.module('myModule').factory('myFactory', function() {
  var method1 = function(){ return 1; };
  return {
    method1: method1,
    method2: function () {
       return method1 + 1;
    }
}]);