如何初始化angular2 typescript

时间:2017-07-10 13:45:38

标签: oop typescript

我有一个班级' Rank'其中包含一个loses属性和一个wins属性。它们都是从Web服务中收集的。我想根据它们计算points属性。

对于Excample:

for(int i = 0; i<loses; i++{
   points += 1;
}
for(int i = 0; i<wins; i++{
   points += 2;
}

排名等级

class Rank{
  $id?:number;
  loses?:number;
  team?:string;
  wins?:number;
  points: number;

  constructor(){}
}

我必须把逻辑放在哪里?

3 个答案:

答案 0 :(得分:0)

我认为您应该在Rank构造函数中进行计算。

class Rank {

  public points: number;

  constructor(public id: number, public loses: number, public team: number, public wins: number) {
    this.points = wins - loses;
  }
}

点不会传递给构造函数,因为它们是在对象构造期间计算的。 您可以阅读构造函数目的here

答案 1 :(得分:0)

您可以将逻辑放在Rank类中的setter中,就像这样

class Rank{
  $id?:number;
  loses?:number;
  team?:string;
  wins?:number;
  points: number;

  constructor(){}

       set newPoints( wins: number, loses:number) {
       this.points += loses; // from your code  points += 1;
       this.points += wins*2; //  points += 2;
       //or you can do it like this this.points += loses + (wins*2)
        }
}

希望这有帮助

答案 2 :(得分:0)

好的,我终于找到了解决方案。我初始化不在类内但在组件内的点值。

export class RankingComponent implements OnInit {

  ranks: Rank[];;
  constructor(private firebaseService: FirebaseService) { }

  ngOnInit() {
    this.firebaseService.getRanks().subscribe(ranks => {
      for(let rank of ranks){
        rank.points = (rank.loses) + (rank.wins*2)
      }
      this.ranks = ranks;
      console.log(ranks);
    })
  }

}