1

Coffee 脚本为我们提供了创建和使用类的方法。我正在尝试使用这种方法并在单独的文件中定义类以将它们用作服务:

class @Account
  isLoaded: no
  blahblah: ->
      ....


app.service('Account', ['$cookieStore', '$http', Account])

对于应用程序中的大多数实体来说,非常常见的问题是一些 CRUD 操作。由于我使用服务(如果它们是单例和工厂,如果不是)来描述这些实体,我现在面临从 $resource 扩展我的服务类的问题。显然,我不能只以标准咖啡脚本的方式使用它:

class @Account extends $resource

目前我发现的唯一解决方案是在模块配置中更改类原型:

app.service('Account', ['$cookieStore', '$http', Account]) 
app.run (Account, $resource) ->
  Account.prototype = new ($resource API_PATH + '/asdasdasd')

这导致我在此之后只能使用所有 $resource 功能,而不是在服务的类构造函数中使用的问题。因此,我应该定义一些额外setup的方法并在这里手动调用它。

第二个问题是所有注入器都在构造函数中传递,因此,所有需要使用该注入器的类方法都应该在构造函数内部定义

  constructor: ($cookieStore, $http) ->
    console.log 'constructed'
    @addresses = [
      new AccountAddress('billing')
      new AccountAddress('shipping')
    ]
    @fetch = ->
      console.log 'here I can use $cookieStore and $http'
  foo: ->
    console.log 'here I can`t use $cookieStore and $http'

这看起来不太好。

有没有办法处理这个问题?

主要思想取自这个谷歌组线程中的第一个答案

4

1 回答 1

0

我对控制器使用了以下语法:

app = angular.module 'myapp', []

class MySimpleCtrl

  @$inject: ['$scope'] 
  constructor: (@scope) ->
    @scope.demo = 'demo value'
    @scope.clearText = @clearText

  clearText: =>
    @scope.demo = ""

app.controller 'MySimpleCtrl', MySimpleCtrl

angular.bootstrap document, ['myapp']

看看这个 jsFiddle:http: //jsfiddle.net/jwcMA/

于 2013-08-12T18:11:56.787 回答