Angularjs Typescript中的控制器继承,缩小导致错误:$injector:unpr未知提供程序
2016年7月19日更新 我的问题实际上是由于不正确使用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要帮助您在出错之前发现此类问题,请使用严格的依赖项注入 从文档中: 使用严格依赖
$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模式就会抛出错误
有关详细信息,请参阅
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>