Coffeescript splats和angular的注射

时间:2014-06-06 01:59:17

标签: javascript angularjs coffeescript browserify

在这种情况下:

# services.coffee
module.exports = apiService : require './api-service'


# api-service.coffee
module.exports = ($http, $q, $window)->
      (config)->
         new ApiResource(config, $http, $q, $window)

class ApiResource
    constructor: (@config, @$http, @$q, @$window)->
        ....


# app.coffee
app = angular.module 'app',[]
app.factory(require('./services'))      

我怎样才能很好地使用注射?我的意思是,如果不是使用一个类我只是在一个函数中执行它(vars将在相同的范围等),这将有效。

我想用一堂课。那么最好的方法是使用coffeescript的强大功能,如splats,mixins等角度?

但是,听起来很愚蠢,可能吗?

 module.exports = ($http, $q, $window)->
     (config)-> new ApiResource(config) # here I need somehow to pass those args

 class ApiResource
    constructor: (args...)->
        $http = args['$http']  # or something like that...

2 个答案:

答案 0 :(得分:1)

除非我误解你想要的东西,否则使用对象模式匹配可能看起来像这样:

class ApiResource
  constructor: ({@$http, @$q, @$window})->
    @$http ?= window.$http # set a default

config =
  $http: {foo: 'bar'}

api = new ApiResource(config)
alert api.$http.foo #=> 'bar'

这会让你更接近你想要的吗?

答案 1 :(得分:1)

这样的事情怎么样?

module.exports = (args...) ->
   new ApiResource(args...)

class ApiResource
   constructor: (args...) ->
      [@$http, @$resource] = args