Angular中Factory注入Controller报Unknown Provider错误求排查
排查AngularJS "Unknown Provider" 错误:自定义Factory注入问题
让我来帮你定位问题所在,你的代码里有两个核心问题导致了这个错误,还有一些需要注意的细节:
1. Factory中错误注入了$scope
AngularJS的Factory属于服务类,服务是全局单例,并不依赖$scope——$scope是控制器、指令这类组件特有的,每个控制器实例都会对应一个独立的$scope对象。你在Factory里声明$scope作为依赖,AngularJS找不到对应的提供者,直接触发了"Unknown Provider"错误。
2. Factory方法内部的无限递归调用
在download方法最后你写了return download();,这会导致函数无限递归调用自己,不仅逻辑无意义,还会引发栈溢出错误,必须移除这行代码。
修复后的完整代码
Factory代码
app.factory('pdfdwn', function() { // 移除$scope依赖 return { download: function() { html2canvas(document.getElementById('export'), { onrendered: function(canvas) { var data = canvas.toDataURL(); var docDefinition = { content: [{ image: data, width: 500, }] }; pdfMake.createPdf(docDefinition).download("Table.pdf"); } }); // 移除了导致递归的return语句 } }; });
Controller代码
app.controller('myctrl', function($scope, pdfdwn){ $scope.pdf = function() { pdfdwn.download(); // 直接调用方法即可,无需接收返回值 }; });
额外检查项
除了代码修复,还要确认以下几点避免其他潜在问题:
- 确保
html2canvas和pdfMake的脚本已经正确引入到页面中,且加载顺序在AngularJS脚本之后 - 确认Factory和Controller都属于同一个
app模块,模块名称没有拼写错误 - 确保Factory的定义在Controller之前,或者两者都在AngularJS模块初始化完成后加载
内容的提问来源于stack exchange,提问作者phoine
相关产品推荐
相关产品推荐

