AngularJS服务注入器错误

时间:2016-04-21 11:22:28

标签: javascript angularjs api typescript

我试图在AngularJS中使用我的API;我提供了一项服务,我现在正试图加载到控制器中,但我发现了一些错误。

Unknown provider: ApiServiceProvider <- ApiService <- ManageIntranetController

我正在使用TypeScript。

我的服务如下:

module Services {
    export class ApiService {

        getIntranetItems: (action: string) => any;

        constructor($scope, $http: ng.IHttpService) {

            this.getIntranetItems = (action: string) => {
                return $http({
                    method: "GET",
                    url: "https://localhost:44326/api/intranet/" + action,
                    headers: { 'Content-Type': 'application/json' }
                }).success(function (data) {
                    $scope.intranetItems = data;
                }).error(function (msg) {
                    alert("ERROR: " + msg);
                })
            };

        }
    }
}

我的控制器看起来像这样:

/// <reference path="../services/apiservice.ts" />


module Controllers {
    export interface IManageIntranetController extends ng.IScope {

    }    

    export class ManageIntranetController {
        constructor($scope: IManageIntranetController, ApiService: Services.ApiService) {
            console.log(ApiService.getIntranetItems("get"));
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您仍需要使用angular注册服务/控制器。例如,您注册一个这样的控制器:

angular
    .module('app')
    .controller('myCtrl', MyController); //where MyController is a TypeScript class

对于服务来说有点复杂。您需要在类中添加一个返回实例的静态函数,在使用angular注册服务时调用该函数,或者(我的个人偏好),在类之外创建一个javascript函数,如下所示:

function factory($q: ng.IQService): MyService {
    return new MyService($q);
}

angular
    .module('app')
    .factory('myService', factory);

答案 1 :(得分:1)

您的错误意味着它不知道服务“ApiService”。您可能忘了在模块上注册它:

angular.module("myApp", [])
    .controller("ManageIntranetController", Controllers.ManageIntranetController)
    .service("ApiService", Services.ApiService);

此外,您的服务无法使用,因为您无法在其中注入$scope。相反,做这样的事情:

export class ApiService {

    getIntranetItems: (action: string) => any;

    constructor($http: ng.IHttpService) {

        this.getIntranetItems = (action: string) => {
            return $http({
                method: "GET",
                url: "https://localhost:44326/api/intranet/" + action,
                headers: { 'Content-Type': 'application/json' }
            });
        };

    }
}

并在您的控制器中:

ApiService.getIntranetItems("get").then((data) => {
    $scope.intranetItems = data;
});