gpt4 book ai didi

javascript - Angularjs服务类型错误未定义不是函数

转载 作者:行者123 更新时间:2023-11-28 15:22:33 25 4
gpt4 key购买 nike

我在 CoffeeScript 中有一个服务,如下所示:

App.service 'CalculateService', ->
@Calculate = (student) ->
if student.type == 'MatureStudent'
student.age + 10
else
student.age + 5

JS版本

App.service('CalculateService', function() {
return this.Calculate = function(student) {
if (student.type === 'MatureStudent') {
return student.age + 10;
} else {
return student.age + 5;
}
};
});

像这样的 Controller :

App.controller 'MarksCtrl', ($scope, $filter, CalculateService, lecture) ->

**create array**
$scope.students = []
angular.forEach $scope.lecture.students, (student) ->
......
$scope.students.push(student)

**save array**
$scope.saveStudents = ->
angular.forEach $scope.students, (student) ->
student.points = CalculateService.Calculate(student)

JS版本

App.controller('MarksCtrl', function($scope, $filter, CalculateService, lecture) {
$scope.students = [];
angular.forEach($scope.lecture.students, function(student) {
return $scope.students.push(student);
});
return $scope.saveStudents = function() {
return angular.forEach($scope.students, function(student) {
return student.points = CalculateService.Calculate(student);
});
};
});

当我调用CalculateService.Calculate时,我不断收到“Typeerror undefined is not a function”,但我不知道为什么。

我已经尝试过了,它有效:

$scope.saveStudents = ->
angular.forEach $scope.students, (student) ->
student.points = 2

所以只有当我调用该服务时才会出现问题。知道如何才能完成这项工作吗?

最佳答案

看起来您正在将函数本身作为服务返回。相反,只是不返回该函数,服务会被注入(inject)器更新,只需将该方法附加到其实例并且不返回任何内容。在您原来的情况下,您必须将其调用为 CalculateService(student)

尝试:

App.service 'CalculateService', ->

@Calculate = (student) ->
if student.type == 'MatureStudent'
student.age + 10
else
student.age + 5

return

我没有用过coffeescript,我用的是这个transpiler弄清楚您的服务定义实际上是什么。在出现此类疑问时,请对服务进行控制台日志记录,以查看它实际输出的内容(在您的情况下,您应该看到该函数本身)。

关于javascript - Angularjs服务类型错误未定义不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30649913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com