AngularJS文档:工厂函数没有返回任何内容

AngularJS documentation: factory function not returning anything

本文关键字:返回 任何内 函数 文档 工厂 AngularJS      更新时间:2023-09-26

AngularJS开发者指南指出:

The service factory function generates the single object or function that represents the service to the rest of the application.

然后给出以下示例:

batchModule.factory('routeTemplateMonitor', ['$route', 'batchLog', '$rootScope',
function($route, batchLog, $rootScope) {
  $rootScope.$on('$routeChangeSuccess', function() {
  batchLog($route.current ? $route.current.template : null);
});
}]);

这里的工厂功能是:

function($route, batchLog, $rootScope) { /* ... */ }

但是这个函数的主体似乎既不返回函数也不返回对象,这似乎与给定的工厂函数的定义相矛盾。给定的工厂函数不应该以return语句结束,并返回一个函数或一个对象来满足工厂函数的定义吗?有人能解释一下我哪里出错了吗?

谢谢。

问题来源

其他形式的文档相同:

请注意,您不是在注册服务实例,而是在调用时创建此实例的工厂函数

您可以这样做,但注入的工厂实例将是未定义的(没有返回语句),所以没有什么意义。

这部分文档的标题被命名为"Dependencies",所以那里的代码示例显示了如何将工厂batchLog注入到routeTemplateMonitor工厂中。工厂内部在这里并不重要。

routeTemplateMonitor内容的最佳位置是运行块IMO.

在angular工厂中,服务是单例的,即只存在一个实例。Factory返回该对象,在Service的情况下,它在场景后面被实例化。

你必须做一些类似的事情

batchModule.factory('routeTemplateMonitor', ['$route', 'batchLog', '$rootScope',
  function($route, batchLog, $rootScope) {
     var factory = {
          doSomething: function () {
             // do something
          }
      };
     return factory;
  });
}]);

您可以返回您想要的任何内容,但在工厂中,当您将工厂注入某个位置时,函数只会运行一次。缺少显式返回语句的函数将返回未定义的

你可以返回一个函数并使用它,你可以返回带有方法的对象并使用它。但重要的是,它只运行一次。