公共或私有 - Angular 2组件类方法混淆

LJ *_*ski 8 typescript angular

我很难理解哪些方法应该是私有的,哪些方法应该在组件类中公开.

在服务中判断方法是公共的还是私有的似乎相当容易,例如:

export class MyServiceClass {
  private _cache = {}; // this value is private and shouln't be accessed from outside
  public accessCache(){ // it's public as it's an API method
    return this._cache;
  }
  public setCache(newVal){
     this._cache = newVal;
  }
}
Run Code Online (Sandbox Code Playgroud)

遵循该逻辑,组件中的所有方法都应该是私有的,因为这些方法都不应该暴露在类之外.(根据该帖子组件及其视图是一个实体)

export class MyComponent {      
  private _getRandomNumbers(){ // this is used in view only
    /*..*/
  }
}
Run Code Online (Sandbox Code Playgroud)

没有悲剧,但是在本视频中你可以了解到只有组件的公共方法才能进行单元测试.通过上面的命令,我找不到任何理由在组件类中使用公共方法,但我仍然有一些值得测试的方法(特别是在视图中使用的方法).这意味着我完全失去了角度世界中私人和公共方法的含义.

所以我的问题很简单:

组件中的哪些方法应标记为公共和私有.

Chy*_*bie 6

我要说的是,在Component Class中,将所有内容都设置为public(如果没有访问修饰符,则默认为public)。

通常情况下,我们不扩展组件类,因此不需要访问修饰符,恕我直言。

在某些情况下,我们将继承组件。参见Angular 2中的组件继承。但是,即使在这些情况下,也可能不需要访问修饰符。

...

export class MyComponent {
  // injected service as private
  constructor(private _randomSvc: RandomService) {} 

  getRandomNumbers(){ } // leave it as public

  @Input()
  myInput: string; // leave it as public

  @Output()
  myOutput; // leave it as public
}
Run Code Online (Sandbox Code Playgroud)

记住Javascript本身没有访问修饰符。访问修饰符仅在开发(IDE)期间适用。尽管修饰符在某些情况下很有用,但我建议尽量减少使用。