javascript - Angular 4: anropa metod från mall


Med Angular 4 behöver jag visa genomsnittet av några nummer. Min komponent ser i princip ut så här:

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html'
})
export class HomeComponent {
  students:string[];
  constructor(private studentsService: StudentsService) {}
  ngOnInit() {
    this.studentsService.getStudents().subscribe(students => {
      ...
    })
    function doAvg (arr) {
      var i,
          len=arr.length,
          average=0,
          obj={};
      for (i=0;i<len;i++) {
         average += arr[i];
      }
      return (average/arr.length);
    }
  }
}

Min mall har denna markup (GPARecord är en array av decimaltal):

<tr *ngFor="let student of students">
  ...
  <td>{{ doAvg(student.GPARecord) }}</td>
</tr>

Men jag får detta felmeddelande i konsolen:

ERROR TypeError: _co.doAvg is not a function

Hjälp! Tack!

Svar #1

(i)Du behöver inte ha nyckelordet function, även med ts, använd let istället för var

(ii) Flytta utanför ngOnInit()

  doAvg (arr) {
          let i,
          len=arr.length,
          average=0,
          obj={};
      for (i=0;i<len;i++) {
         average += arr[i];
      }
      return (average/arr.length);
    }

Svar #2

Du har definierat din funktion i ngOnInit(). Och ta också bort ordet function. Flytta ut den funktionen som

export class HomeComponent {
  students:string[];
  constructor(private studentsService: StudentsService) {}
  ngOnInit() {
    this.studentsService.getStudents().subscribe(students => {
      ...
    });
  }

  doAvg (arr) : number {
      var i, len=arr.length, average=0,

      for (i=0;i<len;i++) {
         average += arr[i];
      }

      return (average/arr.length);
    }
}

Du kan också ta bort variabeln obj från funktionen, eftersom den inte används, och göra att din funktion returnerar typen number.

Relaterade artiklar