AngularJS文档:工厂函数没有返回任何内容
AngularJS documentation: factory function not returning anything
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;
});
}]);
您可以返回您想要的任何内容,但在工厂中,当您将工厂注入某个位置时,函数只会运行一次。缺少显式返回语句的函数将返回未定义的
你可以返回一个函数并使用它,你可以返回带有方法的对象并使用它。但重要的是,它只运行一次。
相关文章:
- AJAX:$_GET不返回任何值
- document.styleSheets不返回任何内容
- 在解析对象.save()中;没有返回任何原因
- PhantomJs在控制台中发出http请求时不会返回任何状态
- 为什么这个array.filter总是不返回任何内容
- 是否有任何内置方法可以更改JavaScript对象'的属性设置为某个值
- 返回$http内的父函数
- IE8DOM转换XML,并且不从jQueryfind()或filter()返回任何内容
- 比较数组中的连续元素不会返回任何结果(javascript)
- WebKitBrowser.StringByEvaluatingJavaScriptFromString 不返回任何值
- Ajax 不返回任何结果
- 我的 API 调用没有返回任何内容
- Javascript函数img.onload不返回任何内容(真或假)
- 为什么我的 sinon 假服务器不返回任何内容
- beforeSave导致查询不返回任何内容
- Ajax对PHP页面的调用总是不返回任何内容,即使PHP页面有回声
- 控制器的Helper函数不返回任何内容
- 函数不返回任何内容
- Breeze.js getEntities不返回任何实体
- 自定义Angular.js过滤器在IE8中不返回任何内容,在Chrome/FF中运行良好