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;}
