angular 2打字稿中的成员属性和构造函数的语法

时间:2016-04-18 00:24:02

标签: typescript angular

所以我正在研究一个使用Angular 2和Typescript的离子2项目,并对成员属性的设置方式感到有些困惑。查看下面的示例,Angular会自动在构造函数参数中注入依赖项。在nav的情况下,我们明确地将实例成员nav设置为构造函数传递的内容。对于Firebase身份验证,我们没有明确将其设置为成员变量,但我们仍然可以通过登录方法中的this.auth访问它,为什么?如果我们用this.nav尝试相同的事情,除非我们明确设置实例变量,否则它不会工作。在构造函数参数中使用private关键字do做了什么 - 在类的属性定义中以及函数参数中声明私有关键字是多余的?如果它们具有相同的名称,它是否真的将构造函数变量绑定到类属性?

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 个答案:

答案 0 :(得分:6)

注意private中的private auth: FirebaseAuth关键字,它是声明从构造函数参数初始化的类属性的简写语法。 它与:

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