AngularJS工厂:用字面量调用父级的最佳方法?

时间:2018-10-21 17:34:43

标签: javascript angularjs

如果我有

var test = {
  return {
    foo: function() {
      return 1
    },
    sub: {
      bar: function() {
        var foo = this.foo() // <--- here, does obviously not work
      }
    }
  }
}

foo()内访问sub.bar()的推荐和最佳方法是什么?

为澄清起见,我想将angularjs服务分成多个部分。


“真实”代码:

angular.module('myApp').factory('Service' function() {
  return {
    foo: function() {
       return 1
     },
     sub: {
       bar: function() {
         var foo = this.foo() // <--- here, does obviously not work
       }
     }
   }
 })

2 个答案:

答案 0 :(得分:2)

这不行:

return {
  foo: function() {
    return 1
  }
}

您需要删除该return语句,并且可以在函数bar中使用变量foo的名称访问函数test,如下所示:{{1 }}

test.foo()

另一种方法是使用函数var test = { foo: function() { return 98989; }, sub: { bar: function() { var foo = test.foo(); console.log(foo); } } }; test.sub.bar();,但功能过于强大:

bind

现在,您可以声明变量var test = { foo: function() { return 98989; }, sub: { bar: function() { var foo = this.foo(); // Using the object 'this' console.log(foo); } } }; test.sub.bar.bind(test)();并使用该变量:

service

答案 1 :(得分:2)

由于您使用的是angular factory,因此可以使用Revealing Module Pattern

angular.module('myApp').factory('Service' function() {
   function foo() {
     return 1
   }

   var sub = {
     bar: function() {
       var foo = foo()
     }
   }

   return {
     foo: foo,
     sub: sub
   }
 })