2013-08-12 65 views
1

咖啡腳本爲我們提供了創建和使用類的方法。我試圖用這個方法,並在不同的文件中定義類使用它們的服務:CoffeeScript定義角度服務的方式

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


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

在申請的大多數實體很常見的問題,是一些CRUD操作。由於我使用的服務(如果它們是單身人士和工廠,如果他們不是)來描述這些實體,我現在面臨的問題是從$ resource擴展我的服務類。很顯然,我不能只用它在標準的CoffeeScript的方式:

class @Account extends $resource 

而現在我發現的唯一的解決辦法是改變類原型模塊配置:

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

其中,使我在這之後我只能使用所有$資源特性的問題,而不是服務的類構造函數。因此,我應該定義一些額外的setup方法並在此處手動調用它。

第二個問題是所有噴射器得到了在構造函數傳遞,因此,所有的類方法需要使用注射器應INSIDE構造函數

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' 

被定義而這並不好看。

有沒有辦法解決這個問題?

主要想法是從第一個答案採取this google groups thread

+0

就個人而言,我會極大地阻止你使用角度類 - 根據我的經驗,它只是不協調。 – Florian

+0

@弗洛裏安,似乎是這樣。但也許在結束這個想法之前,我決定至少問社區。誰知道,也許有我看不到的方法) – SET

+0

嗯,我在最近的一個項目中嘗試過(沒有成功) - 如果你主要關心的是有多個文件用於多個服務,你可以在build上合併它們。 – Florian

回答

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/