所以我正在研究一个使用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);
});
}
}
答案 0 :(得分:6)
注意private
中的private auth: FirebaseAuth
关键字,它是声明从构造函数参数初始化的类属性的简写语法。
它与:
private auth:FirebaseAuth;
constructor(auth: FirebaseAuth) {this.auth = auth;}