2017-08-31 74 views
2

使用Angular 4,我需要顯示一些數字的平均值。我的基本組成如下:Angular 4:從模板調用方法

@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); 
    } 
    } 
} 

我的模板有這個標記(GPARecord是float數組):

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

但我發現了這個錯誤在控制檯:

ERROR TypeError: _co.doAvg is not a function 

幫助!謝謝!

回答

3

(我)你並不需要有關鍵字function,也與TS,使用let,而不是var

(II)以外的ngOnInit()

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

謝謝!這些建議使它工作。 – jdstein1

3

您已在ngOnInit()中定義了您的功能。並刪除function一詞。搬出像

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); 
    } 
} 

您還可以從功能刪除obj變量函數,因爲它不使用,讓你的函數返回類型number

+0

謝謝!這樣可行。 (Sajeetharan的回答有一些額外的信息。) – jdstein1