角度服务和咖啡脚本课程

时间:2013-12-20 16:52:16

标签: javascript angularjs coffeescript

我想要的是将静态类定义为角度服务。

这就是我想要的:

class MyService extends ServiceBase
   @thing  = 'thing'
   @method = -> alert 'I fired'


# neither of these work
angular.module('Foo').service 'MyService', -> MyService
angular.module('Foo').service 'MyService', MyService

# these work but prevent the use of `extends`
angular.module('Foo').service 'MyService', ->
   @thing  = 'thing'
   @method = -> alert 'I fired'

angular.module('Foo').service 'MyService', ->
   thing  : 'thing'
   method : -> alert 'I fired'

myService =
   thing  : 'thing'
   method : -> alert 'I fired'

angular.module('Foo').service 'MyService', -> myService

使用类时出现的错误是类型错误。 Angular需要Object,但所有咖啡类都是Function类型。有办法解决这个问题吗?

请注意,这是因为我想使用.service NOT .factory。我知道如何使用.factory解决这个问题。

1 个答案:

答案 0 :(得分:1)

  

请注意,这是因为我想使用.service NOT .factory。我知道如何用.factory解决这个问题。

为什么呢?洛尔。

好的,无论如何试试这个:

angular.module('Foo').service 'MyService', -> 
    {
       $get: -> MyService
    }

或者这个:

angular.module('Foo').service 'MyService', -> $get: -> myService

编辑:回复以下评论......

  

我的例子中没有构造函数。

实际上有:

class MyService extends ServiceBase

MyService是一个类构造函数,它具有ServiceBase的新实例的原型。期望使用new关键字进行调用。

JavaScript中的功能等同物是:

function MyService() {}

MyService.prototype = new ServiceBase();

所以你看......构造函数。

因此,您可能遇到的一个问题是,您必须在传递给它的每个控制器中创建MyService的新实例,并且每个实例都是不同的。你最好使用一个对象文字来携带状态,或者至少创建一个MyService的新实例并直接从你的服务声明中返回它。这是因为默认情况下,所有角度服务都是单例,这意味着它始终是同一个实例。

请尝试以下操作以允许在两个控制器之间共享值。

angular.module('Foo').service 'storageService' -> $get: -> {}

angular.module('Foo').controller 'SomeCtrl', class SomeCtrl
  constructor: ($scope, storageService) ->
    $scope.storage = storageService
    $scope.storage.i = $scope.storage.i || 0
    $scope.increment = -> $scope.storage.i++

angular.module('Foo').controller 'OtherCtrl', class OtherCtrl
   constructor: ($scope, storageService) ->
     $scope.storage = storageService;     
     $scope.storage.i = $scope.storage.i || 0
     $scope.decrement = -> $scope.storage.i--;

无论如何,我希望有所帮助。节日快乐。