这个。<servicename>在angular2中的错误函数内部不可用

时间:2017-01-19 10:05:43

标签: javascript ajax angular scoping subscribe

我在angular2中有一个奇怪的错误。而以下代码工作正常

loginResult.subscribe(
      (data) =>
        this.response = data,
      (err) =>

        this._ajaxService.handleError(err, 'A string to summarize the activity')
    );

以下代码表示无法读取未定义的属性handleError。只有在请求失败的情况下才会发生这种情况。

    loginResult.subscribe(
   function (response) {

        this.response = response;
        console.log(this.response);

      },
      function (error) {

        this._ajaxService.handleError(error, 'A string to summarize the activity')

      }
    );

3 个答案:

答案 0 :(得分:2)

"this"绑定到成功和失败函数。

loginResult.subscribe(
    function (response) {
        this.response = response;
        console.log(this.response);
    }.bind(this), // <== "this" binding here
    function (error) {
        this._ajaxService.handleError(error, 'A string to summarize the activity')
    }.bind(this)
);

答案 1 :(得分:2)

使用() => {}(箭头函数)作为回调,以便this引用该组件,因为arrow function不会创建自己的this上下文:

  loginResult.subscribe(
      (response) => {
          this.response = response;
          console.log(this.response);
      }, 
      (error) => {
          this._ajaxService.handleError(error, 'A string to summarize the activity')
      }
  );

但是,如果您想使用function(){},您可以bind组件的this上下文功能如下:

  function(response){
      // now 'this' refers to the component class
  }.bind(this)

答案 2 :(得分:0)

let that = this;
    loginResult.subscribe(
      function (res) {

        that.response = res;
        console.log(this.response);

      },
      function (error) {

        that._ajaxService.handleError(error, 'A string to summarize the activity')

      }

    );