Angularjs service typeerror undefined is not a function
Angularjs service typerror undefined is not a function
我在 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;
}
};
});
像这样的控制器:
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
所以只有当我调用服务时才会出现问题。知道我该怎么做吗?
看起来您正在 return 将函数本身作为服务。相反,只是不 return 函数,注入器更新服务只是将方法附加到它的实例,return 什么都没有。在您的原始情况下,您必须将其调用为 CalculateService(student)
尝试:
App.service 'CalculateService', ->
@Calculate = (student) ->
if student.type == 'MatureStudent'
student.age + 10
else
student.age + 5
return
我没有使用过 coffeescript,我用这个 transpiler 来弄清楚你的服务定义到底是什么。在出现此类疑问时,请对服务进行控制台日志记录以查看它实际输出的内容(在您的情况下,您应该看到函数本身)。
考虑到CoffeeScript自动returns最后一行代码,有必要在服务的底部放置一个return语句
app.service 'CalculateService', ->
@Calculate = (student) ->
if student.type == 'MatureStudent'
student.age + 10
else
student.age + 5
return
我在 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;
}
};
});
像这样的控制器:
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
所以只有当我调用服务时才会出现问题。知道我该怎么做吗?
看起来您正在 return 将函数本身作为服务。相反,只是不 return 函数,注入器更新服务只是将方法附加到它的实例,return 什么都没有。在您的原始情况下,您必须将其调用为 CalculateService(student)
尝试:
App.service 'CalculateService', ->
@Calculate = (student) ->
if student.type == 'MatureStudent'
student.age + 10
else
student.age + 5
return
我没有使用过 coffeescript,我用这个 transpiler 来弄清楚你的服务定义到底是什么。在出现此类疑问时,请对服务进行控制台日志记录以查看它实际输出的内容(在您的情况下,您应该看到函数本身)。
考虑到CoffeeScript自动returns最后一行代码,有必要在服务的底部放置一个return语句
app.service 'CalculateService', ->
@Calculate = (student) ->
if student.type == 'MatureStudent'
student.age + 10
else
student.age + 5
return