[英]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.