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.
