我面对coffeescript编译器非常奇怪的行为。在coffee中使用angularjs时,它会更改类构造函数中的参数名称。这会导致角度注射器出现故障。
我通过使用不同的架构解决了问题。我的问题是:为什么会发生这种情况,为什么coffeescript编译器认为必须更改该名称,因为它们位于不同的范围内?
app = angular.module 'test', []
app.config ($q) ->
### do something with $q ###
app.service 'serv',
class MyServ
### constructor saves $q into this, BUT...###
constructor: (@$q) ->
### func uses $q ###
func: ->
@$q.when 'ok'
编译为:
var MyServ, app;
app = angular.module('test', []);
app.config(function($q) {
/* do something with $q */
});
app.service('serv', MyServ = (function() {
/* constructor saves $q into this, BUT... */
function MyServ($q1) {
this.$q = $q1;
}
/* func uses $q */
MyServ.prototype.func = function() {
return this.$q.when('ok');
};
return MyServ;
})());
如果我删除了之前函数(config
)中$ q的使用情况,那么它会按预期工作。
如果不在构造函数中使用@
,它也可以工作。
这是某种错误还是合法的?