如何在类本地方法之一中从Javascript回调访问typescript类成员

时间:2017-08-04 14:50:55

标签: javascript angular typescript callback

我有以下代码:

export class AuthService {
  token: string;
  refreshToken: string;
  constructor(private router: Router) { }

  signinUser(username: string, password: string) {
      const user = new mylib.User(username, password);
      user.requestSessionToken(true, {
        onOk: function (result) {
          let tokenMap: any;
          tokenMap = result;
          this.token = tokenMap.sessionToken;
          this.refreshToken = tokenMap.refreshToken;
          mylib.Datastore.configureWithSessionToken(this.token);
          this.router.navigate(['/signup']);
        },
        onError: function (error) {
          console.error(error);
        }
      });
      console.log(this.token);
      console.log('signinUser Called!');
  }
}

mylib是Javascript库,这不是指向我的对象所以this.token不是在调用 如何在Javascript块中访问我的类字段?

1 个答案:

答案 0 :(得分:1)

箭头功能就是答案。

export class AuthService {
  token: string;
  refreshToken: string;
  constructor(private router: Router) { }

  signinUser(username: string, password: string) {
      const user = new mylib.User(username, password);
      user.requestSessionToken(true, {
        onOk: (result) => {
          let tokenMap: any;
          tokenMap = result;
          this.token = tokenMap.sessionToken;
          this.refreshToken = tokenMap.refreshToken;
          mylib.Datastore.configureWithSessionToken(this.token);
          this.router.navigate(['/signup']);
        },
        onError: (error) => {
          console.error(error);
        }
      });
      console.log(this.token);
      console.log('signinUser Called!');
  }
}

或(旧学校),您可以使用bind()(function (result) { ... }).bind(this)

原因是在onOK回调中,这可能是user个实例,而不是您的类。

在处理回调时,请务必小心this