AngularJS - 从同一服务调用服务功能

时间:2014-12-24 16:56:18

标签: angularjs

我有以下服务:

myApp.service('myService', function(){

    this.functionOne = function(){
         return true;
    };

    this.functionTwo = function(){
         // Call functionOne
    };

});

我想从functionOne调用functionTwo,而不必重写服务的写入方式(在这种情况下,返回带有函数的对象)。

有没有办法使用this格式提供功能?

2 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点,但最安全的是只定义一个_this变量。

myApp.service('myService', function(){
   var _this = this;
   this.functionOne = function(){
        return true;
   };

   this.functionTwo = function(){
        var x = _this.functionOne();
   };
});

在这种情况下,变量_this引用由AngularJS创建的myService对象。

这里的问题是this是一个可以赋值的JavaScript特殊变量。它不像其他语言那样工作。因此,除非您知道在执行闭包函数时this变量将是什么,否则您应该使用您知道的安全变量。

答案 1 :(得分:0)

app.factory('myService', function() {
  var firstFn = function() {
    secondFn();
    //some code
  }

  var secondFn = function() {
     //additional code
  }

  return {
    firstFn: firstFn;
  }

})

此代码将firstFn公开给调用此服务的任何位置。当你调用firstFn时,它也会运行secondFn。注入此服务时,您可以使用myService.firstFn()访问firstFn。希望有所帮助。

注意:我使用的是工厂而不是服务。这两者之间存在微妙但显着的差异。长话短说,工厂比你可以用它做什么更灵活。