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

时间:2015-11-22 12:30:21

标签: javascript angularjs

AngularJS Developer Guide states

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语句结束并返回函数或对象以满足工厂函数的定义吗?有人可以解释我哪里出错吗?

感谢。

Source of question

3 个答案:

答案 0 :(得分:0)

在角度工厂和服务中是单例,即只存在一个实例。 Struct<T>返回该对象,如果是Factory,则在场景后面进行实例化。

您必须执行类似

的操作
Service

答案 1 :(得分:0)

进一步形成相同的文档:

  

请注意,您没有注册服务实例,而是注册工厂函数,这会在调用时创建此实例。

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

该部分文档的标题命名为&#34;依赖关系&#34;,因此代码示例显示了如何将工厂batchLog注入routeTemplateMonitor工厂。工厂内部在这里并不重要。

routeTemplateMonitor内容的最佳位置位于run blocks IMO。

答案 2 :(得分:0)

您可以返回任何您想要的东西,但在工厂中,当您将工厂注入某处时,该功能仅运行一次。缺少显式return语句的函数将返回undefined,

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