简体   繁体   English

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

[英]how to access typescript class member from Javascript callback in one of class local method

i have the folloing code: 我有以下代码:

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 is Javascript library and this is not pointing to my object so this.token is not woking how can i access my class fields in Javascript block? mylib是Javascript库,它没有指向我的对象,因此this.token不能this.token我如何访问Javascript块中的类字段?

Arrow function is the answer. 箭头功能就是答案。

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!');
  }
}

alternatively (old-school), you can use bind() : (function (result) { ... }).bind(this) 另外,(老式),您可以使用bind() :( (function (result) { ... }).bind(this)

The reason is in the onOK callback, this is probably the user instance, not your class. 原因是在onOK回调中,这可能是user实例,而不是您的类。

Always be careful on what is this when you are dealing with callbacks. 一定要加倍小心的是什么this当你正在处理的回调。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM