2016-04-21 4 views
1

Я пытаюсь использовать свой API с AngularJS; Я сделал службу, которую я сейчас пытаюсь загрузить в контроллер, но вижу некоторые ошибки.Ошибка датчика инжектора AngularJS

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

зарегистрировавшиеся вы услугу в своем угловом модуле? например 'angular.module (« myApp », []). service (« ApiService », Services.ApiService);' – devqon

+0

Кроме того, вы не можете вводить '$ scope' в службу, это только для контроллеров и директив – devqon

+0

@devqon Я этого не делал, но теперь я все еще получаю те же ошибки. О, хорошо, я это изменил. – Peurr

ответ

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; 
}); 
+0

Отличный ответ, я думаю, что инъекция '$ scope' делала ошибку. – Peurr

1

Вы все еще должны зарегистрировать свои услуги/контроллеры с угловым. Например, вы регистрируете такой контроллер:

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

Для услуг немного сложнее. Вы либо должны добавить статическую функцию в классе, который возвращает экземпляр, вызовите эту функцию при регистрации службы с угловым, или (моим личным предпочтением), создать яваскрипт функции вне класса следующим образа:

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

angular 
    .module('app') 
    .factory('myService', factory); 
Смежные вопросы