我正在尝试第一次使用AngularJS的Coffeescript。
我想定义一个依赖服务$http
这就是我所期待的:
var MyService = function($http) {
this.$http = $http;
};
MyService.prototype.call = function(url, data) {
this.$http(url, data);
};
myApp.service("webService", MyService)
这是注册服务的常用方法,如AngularJS文档中所示。
在阅读了一篇关于使用Coffeescript和AngularJS的文章后,我试过这个:
myApp.service "webService", class
constructor : (@$http) ->
call : (url, data) -> @$http url, data
但编译结果给出了这个javascript:
myApp.service("webService", (function() {
function _Class(_at_$http) {
this.$http = _at_$http;
}
_Class.prototype.call = function(url, data) {
return this.$http(url, data);
};
return _Class;
})());
问题是Coffeescript编译器不应该用@$http
替换_at_$http
。在我的情况下,它应该输出这个javascript:
myApp.service("webService", (function() {
function _Class($http) {
this.$http = $http;
}
_Class.prototype.call = function(url, data) {
return this.$http(url, data);
};
return _Class;
})());
你可以看到online compiler on Coffeescript website给出了预期的结果,所以我不明白为什么我的工作效果不好。
我需要这个,因为角度注入引擎无法识别_at_$http
,因为它期望$http
参数名称。
答案 0 :(得分:1)
您需要升级到CoffeeScript 1.9.1 or higher:
- 内部编译器变量名称不再以下划线开头。这使得生成的JavaScript更加漂亮,并且还修复了AngularJS"解析"完全破坏和不敬虔的方式的问题。函数参数。
如果您无法升级,那么您可以手动连接实例变量:
constructor : ($http) -> @$http = $http
CoffeeScript.org,一切正常,因为他们总是运行最新版本。