2016-05-10 10 views
0

私は、保存機能を持つラッパーライブラリを作成しています。基本的には$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からのデータをそのまま渡すことを理解しました。それは意味をなさないでしょうか?そうでない場合は教えてください。

+0

使用 '.then(関数(){} .bind(SomeService))' – jcubic

+0

多分これがお手伝いします:[JavaScriptでこの平均値を= VARを何](http://stackoverflow.com/質問/ 4886632/what-does-var-that-this-in-javascript) – praetoriaen

答えて

1

これは、the bind methodが対象です。

then(function(data) { ... }.bind(window)) 
+0

または太い矢印の関数を使用して: 'data => {}'これは、親のスコープからコンテキストを継承します。 – andlrc

+0

私は親のコンテキストが 'window'ではないと確信しています。 – Quentin

+0

こんにちは、答えてくれてありがとう..私は 'bind'について知っていますが、もっと複雑なケースです。' SomeService.save'メソッドは 'Item'オブジェクトを作成します。だから、 'SomeService.save()'を呼び出す関数は、約束が解決されたときに作成されたアイテムと$ httpリクエストによって返されたデータの両方を必要とします。私は新しい 'Item'オブジェクトに' this'を設定し、そのまま$ httpから 'data'を渡すことを知りました。それは意味をなさないでしょうか?もしそうでなければ、私に教えてください。私は同じことを説明しようとしているプラ​​ンを作成します。ありがとう。 – supersan

関連する問題