如何在同一服务中从另一个调用一个Angular函数?

时间:2016-05-06 06:48:53

标签: angularjs

我使用AngularJS定义了以下服务:

myApp.factory('utilitiesService',
    function ($filter) {
      return {
        myFuncA: function (inArg) {
          return "XXXX";
        },

        myFuncB: function (inObj) {
          inObj.c = "CCCC";
          inObj.d = "dddd";
          inObj.newFunc = function() {
            return utilitiesService.myFuncA(
              this.c,
              this.d
            );
          };
          return inObj;
        }
      };
    }
);

在此服务之外,我可以通过注入myFuncA()然后只需执行utilitiesService

来致电utilitiesService.myFuncA("blah blah blah");

但是以同样的方式调用myFuncB()会失败,因为它说它不知道utilitiesService。那么如何从myFuncA()的{​​{1}}中访问myFuncB()

请注意,我无法在inObj.newFunc()的定义中将utilitiesService引用为this,因为在该背景下,newFunc()this

3 个答案:

答案 0 :(得分:4)

更新

myApp.factory('utilitiesService',
  function($filter) {
    return {
      myFuncA: function(inArg) {
        return "XXXX";
      },

      myFuncB: function(inObj) {
        var that = this;
        inObj.c = "CCCC";
        inObj.d = "dddd";
        inObj.newFunc = function() {
          return that.myFuncA(
            this.c,
            this.d
          );
        };
        return inObj;
      }
    };
  }
);
myApp.factory('utilitiesService',
  function($filter) {

    function myFuncA(inArg) {
      return "XXXX";
    };

    function myFuncB(inObj) {
      inObj.c = "CCCC";
      inObj.d = "dddd";
      inObj.newFunc = function() {
        return myFuncA(
          this.c,
          this.d
        );
      };
      return inObj;
    }

    return {
      myFuncA: myFuncA,
      myFuncB: myFuncB
    }
  });

你可以这样做:

myApp.factory('utilitiesService',
  function($filter) {
    return {
      myFuncA: function(inArg) {
        return ("XXXX" + inArg);
      },

      myFuncB: function(inArg) {
        return ("YYYY" + this.myFuncA(inArg));
      }
    };
  }
);

或者如果这些功能不依赖于上下文:

myApp.factory('utilitiesService',
  function($filter) {

    function myFuncA(inArg) {
      return ("XXXX" + inArg);
    }

    function myFuncB(inArg) {
      return ("YYYY" + myFuncA(inArg));
    }

    return {
      myFuncA: myFuncA,
      myFuncB: myFuncB
    };
});

答案 1 :(得分:2)

这是一种方法:

myApp.factory('utilitiesService',
    function ($filter) {
      service = {};

      service.myFuncA = function (inArg) {
        return ("XXXX" + inArg);
      };
      service.myFuncB = function (inObj) {
        inObj.c = "CCCC";
        inObj.d = "dddd";
        inObj.newFunc = function() {
          return service.myFuncA(
            this.c,
            this.d
          );
        };
        return inObj;
      };

      return service;
    }
 );

答案 2 :(得分:0)

myApp.factory('utilitiesService',
  function () {
    return {
      myFuncA: myFuncA,
      myFuncB: myFuncB
    };

    function myFuncA(inArg) {
      return "XXXX";
    }

    function myFuncB(inObj) {
      inObj.c = "CCCC";
      inObj.d = "dddd";
      inObj.newFuncVal = function () {
        return myFuncA(this.c, this.d);
      };

      return inObj;
    }
  }
);