角度矫正'这个'在回调中

时间:2016-03-22 22:47:20

标签: javascript angularjs callback

我在我的角度应用中将对象存储在服务内部,我无法访问这个'这个'来自回调方法。像这样......

    app.service("myService", ['$http', '$q', 
        function($http, $q) {
            return ({foo: foo});

            this.myObj = {};

          function doSomething(param, callback){
            param++;
            callback(param);
          } 

          function foo(param){
          doSomething(param, function(responce){ 
            this.myObj.myParam = responce;//'this' is undefined
          });
          }
     });

如何正确访问? 谢谢......

3 个答案:

答案 0 :(得分:1)

'this'仅保留在函数的当前范围内。当在一个新函数内部调用'this'时会发生变化。大多数人所做的是var that = this;

 app.service("myService", ['$http', '$q', 
    function($http, $q) {
        var that = this;

        return ({foo: foo});

        this.myObj = {};

      function doSomething(param, callback){
        param++;
        callback(param);
      } 

      function foo(param){
        doSomething(param, function(responce){ 
          that.myObj.myParam = responce;//'that' defined
        });
      }
 });

答案 1 :(得分:0)

如果<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> </script> <button>choose file</button> <input type="file" style="opacity:0;"/>是您要成为的对象,则可以使用obj将其设置为函数bind的实际this,作为示例:f

来自documentation

  

bind()方法创建一个新函数,在调用时,将其this关键字设置为提供的值[...]

答案 2 :(得分:0)

您应该将第一个“this”对象存储到某个变量中。 你应该在回调函数中使用它。

app.service("myService", ['$http', '$q', 
    function($http, $q) {
        return ({foo: foo});
        var self = this;
        self.myObj = {};

      function doSomething(param, callback){
        param++;
        callback(param);
      } 

      function foo(param){
      doSomething(param, function(responce){ 
        self.myObj.myParam = responce;
      });
      }
 });

我希望它对你有所帮助。