簡體   English   中英

如何在$ http.post-> AngularJS中的“解析/拒絕”中綁定“ this”? (現在,這= Window對象)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM