我用angularjs做了几个项目,但这是我用typescript做的第一个。我正在使用这个项目作为一种方法,继续学习角度,但也作为一种方式来学习打字脚本,所以我几乎可以肯定的是,这个错误是由于一些我不理解,但我有最困难的时间来解决这个问题。我读到的关于这个错误的所有信息都是我在某个地方有一个错别字,但是我已经看了很多遍了,最后我决定请求你的家人的帮助。不用说,我已经看过很多类似的关于堆栈溢出的问题,但是仍然找不到任何可以帮助我找到解决方案的东西。
我得到的错误是:
Error: [$injector:unpr] Unknown provider: itemSvcProvider <- itemSvc
项目应用程序:
module ItemApp {
'use strict'
var appModule = angular.module('ItemApp', ['ngRoute']);
appModule.config(['$routeProvider',
function ($routeProvider: ng.route.IRouteProvider) {
$routeProvider
.when('/', {
templateUrl: '/App/Item/Views/ItemList.html',
controller: ItemCtrl
})
.otherwise({
redirectTo: '/'
});
}
]);
appModule.factory('ItemSvc', ItemApp.ItemSvc);
appModule.controller('ItemCtrl', ItemApp.ItemCtrl);
}
项目ctrl.ts:
module ItemApp {
'use strict'
export class ItemCtrl implements IItemCtrl {
public id: string;
public item: MainItem;
public testString: string;
private itemSvc: any;
constructor($scope, ItemSvc) {
this.testString = 'Testing';
this.itemSvc = ItemSvc;
this.itemSvc.getItem(this.id).then((data) => this.item = data);
}
}
ItemCtrl.$inject = ['$scope', 'itemSvc'];
}
项目服务:
module ItemApp {
'use strict'
export class ItemSvc {
httpService: ng.IHttpService;
qService: ng.IQService;
constructor($http: ng.IHttpService, $q: ng.IQService) {
this.httpService = $http;
this.qService = $q;
}
getItem(id): ng.IPromise<MainItem> {
var deferred = this.qService.defer();
this.httpService.get('/api/item/' + id).then(res => {
deferred.resolve(res.data);
}).catch(res => {
deferred.reject(res);
});
return deferred.promise;
}
static Factory($http: ng.IHttpService, $q: ng.IQService) {
return new ItemSvc($http, $q);
}
}
ItemSvc.$inject = ['$http', '$q'];
}
index.cshtml:
@{
ViewBag.Title = "List of Items";
}
<div ng-app="ItemApp">
Item Index
<div ng-view></div>
</div>
app/item/views/itemlist.html:应用程序/项目/视图/项目列表:
<div ng-controller="ItemCtrl as ic" >
Item HTML<br />
{{ic.testString}}<br />
</div>
路由至少可以工作,因为我得到一个html屏幕,显示:
Item Index
Item HTML
{{ic.testString}}
所以控制器没有加载teststring值,我得到了错误消息。有没有什么事马上就说是错的?我非常感谢你的帮助!
最佳答案
Angular的依赖注入区分大小写。在appModule.factory('ItemSvc', ItemApp.ItemSvc);
和ItemCtrl.$inject = ['$scope', 'itemSvc'];
之间使用一致的大小写
修复
将appModule.factory('ItemSvc', ItemApp.ItemSvc);
更改为appModule.factory('itemSvc', ItemApp.ItemSvc);