2015-11-17 2 views
6

Мне интересно, как я могу переписать следующую фабрику в код TypeScript. Вот исходный код:TypeScript + AngularJS v1: перезапись угловой фабрики на TypeScript

app.factory('errorInterceptor', function ($q) { 
    return { 
     responseError: function (response) { 
      console.error("Error: " + response.statusText); 
      return $q.reject(response); 
     } 
    } 
}); 

До сих пор я попытался следующие:

export class errorInterceptor { 
    constructor(private $q:ng.IQService) { 

    } 

    public responseError(response:any){ 
     console.error("Error: " + response.statusText); 

     return this.$q.reject(response); 
    } 

    public static getFactory(){ 
     return errorInterceptor; 
    } 
} 

app.factory('errorInterceptor',errorInterceptor.getFactory()); 

Но я получаю следующее сообщение об ошибке:

Provider 'errorInterceptor' must return a value from $get factory method. 

Любые идеи?

ответ

2

Я использую этот синтаксис:

export class errorInterceptor { 
    // to support minification 
    static $inject = ["$q"]; 

    constructor(private $q:ng.IQService) { 

    } 

    public responseError(response:any){ 
     console.error("Error: " + response.statusText); 

     return this.$q.reject(response); 
    } 

    //public static getFactory(){ 
    // return errorInterceptor; 
    //} 
} 

//app.factory('errorInterceptor',errorInterceptor.getFactory()); 
app.service('errorInterceptor',errorInterceptor); 

ПРОДЛИТЕ:

Это фрагмент кода, который я использую для перехвата $http вызовов (так он делает работу для меня)

module MyModule 
{ 
    var app = angular.module("MyModule"); 

    export class HttpErrorAspect 
    { 
     static $inject = ["$q"]; 

     constructor(private $q: ng.IQService) 
     { 
     } 

     public responseError = (rejection: any): any => 
     { 
      // do some magic, e.g. use toaster or alerter 
      // to notify about the issue 
      ... 

      // reject that all 
      return this.$q.reject(rejection); 
     } 
    } 

    app.service("HttpErrorFilter", MyModule.HttpErrorAspect); 
} 
+0

Это работает, но бросает мне другую ошибку: "TypeError: Не удается прочитать свойство 'отвергнуть' неопределенный". Есть идеи? Когда я отлаживаю, он читает это. $ Q как undefined в responseError – uksz

+0

Я расширил свой ответ фрагментом, который я использую для перехвата $ http –

+1

Работает как шарм! <3 – uksz