Angular 4:从模板调用方法

时间:2017-08-31 05:32:43

标签: javascript angular typescript

使用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是一个浮点数组):

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

但我在控制台中收到此错误:

ERROR TypeError: _co.doAvg is not a function

帮助!谢谢!

2 个答案:

答案 0 :(得分:3)

(i)您不需要使用关键字 function ,也可以使用 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);
    }

答案 1 :(得分: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