我想要的是将静态类定义为角度服务。
这就是我想要的:
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
解决这个问题。
答案 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--;
无论如何,我希望有所帮助。节日快乐。