网站搜索

Angular 2 TypeScript 中的成员属性和构造函数的语法


所以我正在看一个使用 Angular 2 和 TypeScript 的 Ionic 2 项目,对于成员属性是如何设置的有点困惑。看下面的例子,Angular 会自动将依赖注入到构造函数参数中。在 nav 的情况下,我们显式地将实例成员 nav 设置为构造函数传入的值。在 Firebase auth 的情况下,我们没有显式地将它设置为成员变量,但仍然可以在 login 方法中通过 this.auth 访问它,这是为什么呢?如果我们尝试对 this.nav 做同样的事情,除非我们显式地设置实例变量,否则它是无法工作的。在构造函数参数中使用 private 关键字有什么作用——在类中在属性定义中声明 private 关键字,同时在函数参数中也使用它,这样做是不是多余的?如果构造函数的变量名与类属性相同,它会神奇地将构造函数变量绑定到类属性上吗?

export class LoginPage {
  nav:NavController;
  private auth: FirebaseAuth;

  constructor(nav:NavController, private auth: FirebaseAuth) {
    this.nav = nav; // if we don't do this, the setRoot below in login doesn't do anything
    //this.auth = auth;  // how come we don't have to set the member variable here and it's still available in the login method
  }

  login() {
    this.auth.login().then(authData =>{
       this.nav.setRoot(TabsPage);
    });
  }
}

答案#1

注意 private 关键字在 private auth: FirebaseAuth 中,它是从构造函数参数初始化类属性的简写语法。它与以下方式相同:

private auth:FirebaseAuth;
constructor(auth: FirebaseAuth) {this.auth = auth;}

相关文章