我试图在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"));
}
}
}
答案 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;
});