繁体   English   中英

Angular服务和咖啡脚本类

[英]Angular services and coffee-script classes

我想要的是将静态类定义为angular中的服务。

这是我想要的:

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但是所有的Coffee类都是Function类型的。 有没有解决的办法?

请注意,这是因为我要使用.service NOT .factory 我已经知道如何使用.factory修复此.factory

请注意,这是因为我要使用.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实例,而这些实例中的每个实例都是不同的。 您最好使用对象文字来承载状态,或者至少创建一个MyService的新实例,然后直接从服务声明中返回该实例。 这是因为默认情况下,所有角度服务都是singletons ,这意味着它将始终是同一实例。

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

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--;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM