2017-04-13 63 views
0

我對打字機有了新的認識,我創建了一個控制器,並且需要在我的控制器中注入服務,以便我可以使用它的方法。但是我無法使用服務功能和它的投擲錯誤。無法在打印機中的Controller中注入服務

錯誤

TypeError: _this.marketingService.getAllActiveItems is not a function 
    at ExportController.getRealCustomerInfo (exportCtrl.js:20) 
    at $parseFunctionCall (angular-1.3.js:12475) 
    at callback (angular-1.3.js:21703) 
    at ChildScope.$eval (angular-1.3.js:14571) 
    at ChildScope.$apply (angular-1.3.js:14670) 
    at HTMLInputElement.<anonymous> (angular-1.3.js:21708) 
    at HTMLInputElement.dispatch (jquery.min.js:14) 
    at HTMLInputElement.a.handle (jquery.min.js:14) 

控制器

module Marketing.GetRealExportCtrl { 

    import IStateParamsService = ng.ui.IStateParamsService; 
    import IFlashService = Flash.Services.IFlashService; 

    class ExportController { 

     listFilters: any; 
     fileterExport: any; 
     currentValue: string; 
     filterValueSelected: string; 
     listNumber: number; 
     reports: ICustomerInfo[]; 

     static $inject = ['$stateParams', 'marketingService', '$scope']; 

     constructor(private marketingService: IMarketingService) { 

      this.listFilters = [ 
       { 
        name: 'All', 
        listNumber: 1 
       }, 
       { 
        name: 'All PCs', 
        listNumber: 2 
       }, 
       { 
        name: 'All BPs', 
        listNumber: 3 
       }]; 

      this.fileterExport = this.listFilters[0]; 
      this.listNumber = this.listFilters[0]; 
     } 

     changeFilter =(): void => { 
      this.listNumber = this.fileterExport.listNumber; 
     } 

     getRealCustomerInfo =() => { 
      this.marketingService.getRealCustomerInfo(this.listNumber) 
       .then((reports: ICustomerInfo[]) => { 
        this.reports = reports; 
       }, function (err) { 
        var e = err; 
        console.log(e); 
       }); 

     } 
    } 

    angular 
     .module('Marketing') 
     .controller('ExportController', ExportController); 
} 

我的營銷服務

module Marketing.MarketingService { 
    import IAjaxService = Common.IAjaxService; 
    import AjaxServiceOptions = Common.ajaxService.AjaxServiceOptions; 
    import IAjaxResponse = Common.IAjaxResponse; 


    class MarketingService implements IMarketingService { 
     constructor(
      private ajaxService: IAjaxService, 
      private $translate: ng.translate.ITranslateService, 
      private $q: ng.IQService) { 
      this.$q = $q; 
     } 
     getRealCustomerInfo = (listNumber: number): ng.IPromise<ICustomerInfo[]> => { 
      return this.ajaxService.makeAdminCall('marketingApi', 'getRealCustomerInfo', new AjaxServiceOptions({ 
       cache: false, 
       defaultErrorMessage: 'Loading Customers failed' 
      })).then((result: IAjaxResponse) => { 
       if (result.data.isSuccessful) 
        return result.data.data; 
      }); 
     } 
    } 

    service.$inject = ['ajaxService', '$translate', '$q']; 

    function service(ajaxService, $translate, $q) { 
     return new MarketingService(ajaxService, $translate, $q); 
    } 

    angular 
     .module('Marketing') 
     .service('marketingService', service); 
} 

接口

declare module Marketing { 
    export interface ICustomerInfo { 
     CustomerID: number; 
     CustomerName: string; 
     Phone: string; 
     Phone2: string; 
     MobilePhone: string; 
     Email: string; 
     MainAddress1: string; 
     CustomerTypeID: number; 
     CustomerTypeDescription: string; 
     SponsorID: number; 
     SponsorName: string; 
     EnrollerID: number; 
     EnrollerName: string; 
     PriceTypeID: number; 
     PriceTypeDescription: string 
    } 
    export interface IMarketingService { 

     getRealCustomerInfo: (listNumber: number) => ng.IPromise<ICustomerInfo[]>; 
    } 
} 

對我來說似乎是無法找到控制器this.marketingService.getRealCustomerInfo(this.listNumber)功能。 我被困在現在的日子裏,仍然不知道爲什麼會發生這種情況。 請幫忙,提前致謝。

回答

1

我認爲你的錯誤在於依賴注入ExportController

您使用

static $inject = ['$stateParams', 'marketingService', '$scope']; 

,但你的構造函數是

constructor(private marketingService: IMarketingService) { ... } 

在這裏,你的變量marketingService需要第一依賴$stateParams的值(不包含要調用的函數)。

您可以通過在您的$inject聲明中刪除未使用的依賴關係或根據您的注入完成構造函數來解決此問題。

一個友情提示:

MarketingService

constructor(
    private ajaxService: IAjaxService, 
    private $translate: ng.translate.ITranslateService, 
    private $q: ng.IQService) { 
    this.$q = $q; 
} 

你不需要this.$q = $q;。只要您爲構造函數參數指定可見性(訪問修飾符),它就會自動綁定到您的類(更多here)。