在这种情况下:
# 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...
答案 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