【问题标题】:Syntax of member properties and constructors in angular 2 typescriptangular 2 typescript 中成员属性和构造函数的语法
【发布时间】:2016-04-18 00:24:01
【问题描述】:

所以我正在查看一个使用 Angular 2 和 Typescript 的 ionic 2 项目,并且对如何设置成员属性有点困惑。查看下面的示例,Angular 会自动在构造函数参数中注入依赖项。在 nav 的情况下,我们将实例成员 nav 显式设置为构造函数传入的内容。在Firebase auth的情况下,我们并没有显式地将它设置为成员变量,但是我们仍然可以通过登录方法中的this.auth来访问它,怎么会呢?如果我们用this.nav 尝试同样的事情,除非我们明确设置实例变量,否则它不会工作。在构造函数参数中使用 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);
    });
  }
}

【问题讨论】:

标签: typescript angular


【解决方案1】:

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

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

【讨论】:

  • 您不需要指定private auth:FirebaseAuth 成员变量。当在构造函数中使用 (private | public | protected) 参数时,这将在对象上隐式创建。
猜你喜欢
  • 2018-01-14
  • 2016-11-07
  • 2016-07-08
  • 2014-09-13
  • 2016-07-08
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多