如何绑定"这个"在$ http.post - >在AngularJS中解决/拒绝? (现在这= Window对象)

时间:2016-05-10 08:49:04

标签: javascript angularjs angularjs-scope this

我正在编写一个具有保存功能的包装器库。基本上它只调用$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>
&#13;
&#13;
&#13;

如果您运行上面的代码,警报会显示[对象窗口]。 所以我的问题是:是否可以绑定this来说SomeService(示例)或其他一些对象?

P.S。一个想法是,我可以为$http.get编写一个包装器,而不是直接返回promise,然后在解决我自己的promise之前以某种方式绑定this运算符?但我无法找到有关如何使用(this)绑定解决承诺的任何信息。

更新:感谢您的建议.. 我知道bind,但案例稍微复杂一点。 SomeService.save方法创建了一个Item对象。因此,在解析promise时,调用SomeService.save()的函数既需要创建的项,也需要$ http请求返回的数据。我发现我只是将它设置为新的Item Object并从$ http原样传递数据。这有任何意义吗?如果没有,请告诉我,我会创建一个试图解释相同的傻瓜。

1 个答案:

答案 0 :(得分:1)

那是the bind method的用途。

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