You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:15:38