2017-08-31 127 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