私は、保存機能を持つラッパーライブラリを作成しています。基本的には$http.post
関数を呼び出して約束を返します(簡潔にするため)。約束が解決されたときに呼び出される関数で
残念ながらthis
オペレータWindow
オブジェクトを指す(結果データで呼び出さすなわち機能)。ですから、約束が解決または拒否されたときに、this
オペレータを別のオブジェクトにバインドする方法があるのでしょうか?
より多くの意味を作るために以下のコードを見てください:あなたは上記のコードを実行した場合
angular.module('SomeService', []).service('$service', function($http) {
this.get = function() {
return $http.get('http://jsonplaceholder.typicode.com');
}
return this;
});
angular.module('testApp', ['SomeService']).controller('testController', function($service) {
$service.get().then(function(data) {
alert(this);
//It should say Object Window!
//Is is possible to bind `this` to say SomeService (example),
//Or some other object?
});
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="testApp" ng-controller="testController">
{{1+1}}
</div>
を、アラートは[オブジェクトウィンドウ]言います。 私の質問は:this
SomeService(例)、または他のオブジェクトをバインドすることは可能ですか?
P.S.一つのアイデアは、約束を直接返すのではなく$http.get
のラッパーを書くことができ、自分の約束を解決する前に何らかの形でthis
演算子をバインドすることができますか?しかし、(this
)バインディングで約束を解決する方法に関する情報は見つかりません。
更新:提案ありがとうございました.. 私はバインドについて知っていますが、ケースはもう少し複雑です。 SomeService.saveメソッドは、Itemオブジェクトを作成します。そのため、SomeService.save()を呼び出す関数では、約束が解決されたときに作成されたアイテムと$ httpリクエストによって返されたデータの両方が必要になります。私はこれを新しいItemオブジェクトに設定し、$ httpからのデータをそのまま渡すことを理解しました。それは意味をなさないでしょうか?そうでない場合は教えてください。
使用 '.then(関数(){} .bind(SomeService))' – jcubic
多分これがお手伝いします:[JavaScriptでこの平均値を= VARを何](http://stackoverflow.com/質問/ 4886632/what-does-var-that-this-in-javascript) – praetoriaen