[英]How to bind “this” in $http.post -> resolve / reject in AngularJS? (right now this = Window object)
我正在寫一個具有保存功能的包裝器庫。 基本上,它只是調用$http.post
函數並返回promise(為簡便起見)。
不幸的是,在解決了promise時被調用的函數中的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>
如果運行上面的代碼,警報將顯示[Object Window]。 所以我的問題是:可以結合this
說SomeService(例如),或一些其他的對象?
PS一個想法也許是我可以為$http.get
編寫包裝程序,而不是直接返回諾言,然后以某種方式綁定this
運算符,然后再解決我自己的諾言? 但是我找不到有關如何使用( this
)綁定解決承諾的任何信息。
更新:感謝您的建議。 我了解綁定,但是情況有點復雜。 SomeService.save方法創建一個Item對象。 因此,在解決承諾后,調用SomeService.save()的函數既需要創建的項,也需要$ http請求返回的數據。 我發現我只是將其設置為新的Item Object並按原樣傳遞來自$ http的數據。 這有任何意義嗎? 如果沒有,請告訴我,我將創建一個plunkr嘗試解釋一下。
這就是bind
方法的目的。
then(function(data) { ... }.bind(window))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.