Angularjs Typescript中的控制器继承,缩小导致错误:$injector:unpr未知提供程序

Angularjs Typescript中的控制器继承,缩小导致错误:$injector:unpr未知提供程序,angularjs,typescript,minify,angularjs-controller,grunt-contrib-uglify,Angularjs,Typescript,Minify,Angularjs Controller,Grunt Contrib Uglify,2016年7月19日更新 我的问题实际上是由于不正确使用$inject造成的。我在api service.ts中将它用作private$inject,但它应该是public static$inject=[…]。丑化时,它依赖于显式注入,但private$inject使其隐式 我有一个非常相似的问题。我的错误消息不是tProviderunknown,而是具有特定的提供者名称,但看起来像 未知提供者:eProvider要帮助您在出错之前发现此类问题,请使用严格的依赖项注入 从文档中: 使用严格依赖

2016年7月19日更新

我的问题实际上是由于不正确使用
$inject
造成的。我在
api service.ts
中将它用作
private$inject
,但它应该是
public static$inject=[…]
。丑化时,它依赖于显式注入,但
private$inject
使其隐式


我有一个非常相似的问题。我的错误消息不是
tProvider
unknown,而是具有特定的提供者名称,但看起来像


未知提供者:eProvider要帮助您在出错之前发现此类问题,请使用严格的依赖项注入

从文档中:

使用严格依赖注入 您可以在与
ng app
相同的元素上添加
ng strict di
指令,以选择进入严格di模式:

<!doctype html>
<html ng-app="myApp" ng-strict-di>
<body>
  I can add: {{ 1 + 2 }}.
  <script src="angular.js"></script>
</body>
</html>

我可以加上:{{1+2}。
每当服务试图使用隐式注释时,Strict模式就会抛出错误

有关详细信息,请参阅


Hi@georgeawg,如果我通过派生控制器将构造函数参数传递给BaseController,我仍然需要$inject来再次声明所需的参数?问题在于
api服务的依赖项注入。确保它具有正确的
$inject
属性。向我们展示该服务的代码。您刚刚提出了正确的观点,它确实帮助我解决了问题!非常感谢!非常感谢,乔治。我试过了,但没有出现任何错误。关键是你的建议实际上指示我检查是否存在任何隐式注入,我发现我在
api服务
中编写了
private$inject=[…]
,我认为这就是灾难开始的地方。我把它改成了
publicstatic$inject=…
并对它进行了改进,现在它可以工作了!!
...
class ComponentAController extends BaseController {
    public static $inject = ['baseDI-service', ...];

    constructor(baseDIService: BaseDIService) {
        ...
        super(baseDIService); 
        ...
    }
}
export default class BaseControllerDIService {
    public static $inject = ['api-service', '$http', ...];
    constructor(
        private apiSvc: ApiService,
        private $http: ng.IHttpService,
        ...
    ) {}

    public getBaseClassDependencies() {
        return{
            apiService: this.apiSvc,
            $http : this.$http
            ... : ...
        };
    }
}
export default class BaseController implements ng.IComponentController {    
    apiService: ApiService;
    $http: ng.IHttpService;

    constructor(
        baseDIService: BaseDIService
    ) {
        const services = baseDIService.getBaseClassDependencies();
        this.$http = services.$http;        
        this.apiSvc = services.apiService;
        ...
        this.otherService = services.otherServices;
        ...
    }
<!doctype html>
<html ng-app="myApp" ng-strict-di>
<body>
  I can add: {{ 1 + 2 }}.
  <script src="angular.js"></script>
</body>
</html>