我有一项服务,我正在尝试创建一个递归函数:
function(angular){
'use strict';
angular.module('main')
.service('testRecursionService', function () {return {
'factorial': function(data){
if(data = 1){
return data
}
else{
return data * this.factorial(data - 1);
}
}}})}(angular.window)
当我在控制器内调用阶乘函数时,它表示这是未定义的。我来自Java / C#背景,所以我的理解是服务对象是由注入器创建的,从那时起我应该可以调用阶乘函数。
但是如何定义?我错过了什么吗?
答案 0 :(得分:0)
试试这个:
'use strict';
function(angular) {
angular.module('main')
.service('testRecursionService', function () {
return {
factorial: function(data){
if(data === 1){
return data;
}
else {
return data * this.factorial(data - 1);
}
}
};
});
}(angular.window);
问题应该是你的函数名称(factorial
)用引号表示,因此说它是未定义的。
您还需要在=
声明中将===
更改为if
。或者您将data
指定为1
,而不是检查它是1
。
答案 1 :(得分:0)
您不需要在属性名称周围使用引号,但我不认为应该引起问题。另外,我认为你需要使用' ==='而不是条件中的赋值运算符。
<强>的script.js 强>
var app = angular.module('main', []);
app.service('RecursionService', function (){
var service = {
'factorial': factorial
};
return service;
////////////////////
function factorial(data){
// not '=' as this always be true
if(data === 1){
return data;
}
return data * this.factorial(data - 1);
}
});
app.controller('foo', foo);
foo.$inject = ['$scope', 'RecursionService'];
function foo($scope, RecursionService){
$scope.number = {
value: 1
};
$scope.getResult = function(num){
$scope.result = RecursionService.factorial(num);
}
$scope.getResult($scope.number.value);
}
<强>的index.html 强>
<!DOCTYPE html>
<html >
<head>
<link rel="stylesheet" href="style.css" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
</head>
<body ng-app="main" >
<div ng-controller="foo">
<input type="text" ng-model="number.value" ng-change="getResult(number.value)">
{{result}}
</div>
<script src="script.js"></script>
</body>
</html>