服务函数中的AngularJS返回null

时间:2015-07-09 08:09:57

标签: javascript angularjs angularjs-directive

我有一项服务,我正在尝试创建一个递归函数:

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#背景,所以我的理解是服务对象是由注入器创建的,从那时起我应该可以调用阶乘函数。

但是如何定义?我错过了什么吗?

2 个答案:

答案 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)

您不需要在属性名称周围使用引号,但我不认为应该引起问题。另外,我认为你需要使用' ==='而不是条件中的赋值运算符。

Demo

<强>的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>