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;
});
}]);
您可以返回您想要的任何内容,但在工厂中,当您将工厂注入某个位置时,函数只会运行一次。缺少显式返回语句的函数将返回未定义的
你可以返回一个函数并使用它,你可以返回带有方法的对象并使用它。但重要的是,它只运行一次。