Coffescript使用错误的参数名称编译构造函数

时间:2015-07-30 08:15:09

标签: javascript angularjs coffeescript

我正在尝试第一次使用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参数名称。

1 个答案:

答案 0 :(得分:1)

您需要升级到CoffeeScript 1.9.1 or higher

  
      
  • 内部编译器变量名称不再以下划线开头。这使得生成的JavaScript更加漂亮,并且还修复了AngularJS"解析"完全破坏和不敬虔的方式的问题。函数参数。
  •   

如果您无法升级,那么您可以手动连接实例变量:

constructor : ($http) -> @$http = $http

CoffeeScript.org,一切正常,因为他们总是运行最新版本。