我用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);

10-05 21:09