这个Angular代码有什么问题?

时间:2015-07-28 18:38:13

标签: javascript angularjs

angular.module('events.services', [])
    .factory('EventService', function($http, $cordovaSQLite) {
        return {
            test: function() {
                return 'It Works!';
            }
        }
    }
})

控制器

.controller('NearCtrl', function($scope, $http, $cordovaSQLite, EventService) {
    var test = EventService.test;
    console.log(test); // I expect 'It works' to be here, but returns 'function test();'
})

为什么不返回'It Works!' ?非常感谢。

1 个答案:

答案 0 :(得分:1)

根据评论,并按照JS语言

在以下link

  

调用函数   定义函数不会执行它。定义函数只是命名函数并指定调用函数时要执行的操作。调用该函数实际上使用指示的参数执行指定的操作。例如,如果定义函数square,则可以按如下方式调用它:

square(5);

如您所见,该功能需要执行()

function square(num){
  return num
}

console.log(square);
=> function square(num)

console.log(square( 5 ));
=> 5

当您使用工厂时,

console.log(EventService);
=> { test: function() { return 'It Works!'; }

在您的方案中,您的工厂已返回一个对象,该对象具有指向匿名函数的 test 属性。

只需调用 EventService.test 就会像调用 console.log(square); 时一样返回匿名函数。要使用返回的函数值,您还必须像这样调用它

EventService.test();

继续按照您认为合适的方式发布问题,但也要记住首先对代码进行问题排查,如果您仍然需要提问,请提供解决问题所需的所有步骤:)