Angular Provider / JS - 如何从$ http()。then()访问'uncle方法'?

时间:2016-05-04 17:11:44

标签: javascript angularjs promise

问题是我无法访问set方法:

  this.$get = function( $http ) {

    return 
    {
      set: function(UserData)
      {
        this.user = UserData ;
        localStorage.setItem('user', JSON.stringify( UserData ) );
      },

      get: function()
      {
        return this.user;
      },

      send: function(data)
      {
        $http.post(BASE_URL + 'user/login', data)
            .then( function( res ){

              // Error !

              this.set(res.data); 

              console.log(this); // return window object

              // Here i want to access to 'this.set()'
              // but i get error: 'ypeError: this.set is not a function'

            });
      }
    }
 }

我搜索了访问this.set()

的解决方案

谢谢!

1 个答案:

答案 0 :(得分:3)

this的副本保存在回调之外并使用它。

this.$get = function ($http) {
  return {

    set: function (UserData) {
      this.user = UserData;
      localStorage.setItem('user', JSON.stringify(UserData));
    },

    get: function () {
      return this.user;
    },

    send: function (data) {
      var _this = this;
      var url = BASE_URL + 'user/login';
      $http.post(url, data).then(function (res) {
        _this.set(res.data); 
      });
    }

  };
}

使用ES6:

this.$get = function ($http) {
  return {

    set(UserData) {
      this.user = UserData;
      localStorage.setItem('user', JSON.stringify(UserData));
    },

    get() {
      return this.user;
    },

    send(data) {
      let url = BASE_URL + 'user/login';
      $http.post(url, data).then(res => {
        this.set(res.data); 
      });
    }

  };
}