【问题标题】:AngularJS, callback and variables scopesAngularJS,回调和变量范围
【发布时间】:2014-08-11 07:12:41
【问题描述】:

我实际上面临着一般的 javascript 问题。事实上,我需要在两个不同的文件中调用回调后更新一个列表。

这是我对回调的描述:

 this.modify = function(){
    var self = this;
    var success = function(){
      self.user = self.userEdit;
    };

    var err = function(data){
      alert(data);
    };

    UserService.put(this.userEdit, success, err);
  }
}

这是调用回调的函数:

 UserService.put = function (data, succ, err) {
        var user = {login:data.login,nom:data.nom,prenom:data.prenom,password:data.password};
        $http({
            url: __ADRS_SRV__ + "user/"+data._id,
            method: "PUT",
            data:user,
            isArray: true
        }).success(function(data){
           succ();
        }).error(function(error){
            err(error);
        });
    }

其实

var success = function(){
      self.user = self.userEdit;
    };

似乎无法正常工作,当我在回调调用中登录 self.user 时,我得到一个未定义的...

你有想法绕过这个吗?

感谢提前

【问题讨论】:

    标签: javascript angularjs callback


    【解决方案1】:

    在声明 success 函数之前,您必须记住 thisself

    var self = this;
    var success = function(){
      self.user = self.userEdit;
    };
    

    或者另一种方法是只使用this,但将函数与this 变量绑定:

    var success = function() {
      this.user = this.userEdit;
    }.bind(this);
    

    希望这会有所帮助。

    【讨论】:

    • 我已经在我的代码顶部做了这个,每次我有一个回调函数要管理时都不必重写它
    • 那么最好也包含这些代码,以免其他人猜测。在调用this.modify() 后,this.userEdit 是否已被清除?
    • 不,从不...如果我在回调声明之前调用 console.log(self.user),我就有了我的对象。如果我将它记录到我的回调函数中,我有一个未定义的。我无处可清除:-/
    • 你的意思是console.log(self.userEdit)
    • 是的,对不起,今天早上有点难:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多