使用咖啡脚本类创建角度控制器的最佳做法是什么?我已经谷歌搜索了一段时间,但到目前为止还没有找到一个非常好的解决方案。
根据this article作者提出以下方法:
angular.module('myApp').controller 'SomeCtrl',
class SomeCtrl
someModels: -> ...
但是,如何对这种控制器进行任何注射并不清楚。由于咖啡会自动将所有方法移动到构造函数的原型,我将无法在这些方法中访问注入的服务。
到目前为止,解决这个问题的唯一方法是:
angular.module('myApp').controller 'SomeCtrl',
class SomeCtrl
@$inject: ['SomeService']
constructor: (someService) ->
@load = ->
# access to someService
显然这很难看,更不用说内存效率低了。
所以问题是,使用Coffee好吃的东西定义角度控制器的最佳方法是什么?
编辑:
显式使用进样器还有另一种选择:
app = angular.module('myApp')
injector = angular.injector([app.name])
injector.invoke ['SomeService', (SomeService) ->
app.controller 'SomeCtrl',
class SomeCtrl
foo: 'bar'
func: ->
# Prototype function with access to SomeService without exposing it in API.
]
然而,这会使代码顺序依赖,并且像地狱一样丑陋。
我理想的是将某个控制器定义为工厂的某种方式 - 而不是传递构造函数我希望传递一个返回构造函数的函数。这样的事情可能吗?
答案 0 :(得分:1)
首先定义类,在构造函数中添加所需的服务......
class SomeCtrl
constructor: (someService)-> alert someService 9
接下来,将控制器附加到应用程序...
angular.module('myApp').controller 'SomeCtrl', SomeCtrl
<div ng-app="myApp">
<div ng-controller="SomeCtrl">
</div>
</div>
......和......
angular.module 'myApp', []
angular.module('myApp').factory 'someService', ->
(x)-> x * x;
class SomeCtrl
constructor: (someService)-> alert someService 9
someModels: ->
angular.module('myApp').controller 'SomeCtrl', SomeCtrl