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;
})());
CoffeescriptのWebサイトでオンラインコンパイラが期待どおりの結果をもたらすことを確認できるので、なぜ私のものがうまく機能していないのかわかりません。
そして、これが必要なのは、角度注入エンジン_at_$http
が$http
パラメーター名を予期しているために認識されないためです。
CoffeeScript1.9.1以降にアップグレードする必要があります。
- 内部コンパイラ変数名は、アンダースコアで始まらなくなりました。これにより、生成されたJavaScriptが少しきれいになり、AngularJSが関数の引数を「解析」する完全に壊れた不敬虔な方法の問題も修正されます。
アップグレードできない場合は、インスタンス変数を手動で接続できます。
constructor : ($http) -> @$http = $http
CoffeeScript.orgは常に最新バージョンを実行しているため、すべてが正常に機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加