2015-03-12 15 views
14

Hintergrund, aktuelle Implementierung von Klassen/Modulen in unserer App ist common.js und CoffeeScript-Klassen. Ich suche verzweifelt nach einer Lösung, um mit ES6 oder TypeScript zu arbeiten, aber das Problem bleibt bestehen.Angular.js DI mit (ES6) Klassen und Vererbung

Wie mache ich DI mit Klassenvererbung mit Angular-1.x?

den Code Gegeben:

// SuperService.js 
class SuperService { 
    constructor($http, $q, $etc) { 
    // Implementation is not important ... 
    } 
} 
export { SubService } 

// SubService.js 
import { SuperService } from './SuperService'; 
class SubService extends SuperService { 
    constructor($more, $di, $things, $here) { 
    // Implementation is not important ... 
    // // // // // // // // // // 
    // Problem exists here ... // 
    // // // // // // // // // // 
    super($we, $need, $all, $the, $super, \ 
      $class, $di, $things, $every, $time, $we, \ 
      $inherit, $from, $it) 
    } 
} 
export { SubService } 

muss man in der SubService hier neu definieren alle Eltern DI Anforderungen, um super() erfolgreich zu nennen?

Wir sind derzeit so etwas wie die folgenden Aktionen ausführen:

// CoffeeScript        // Javascript 
app.factory "subService", (Service) ->  app.factory("subService", function(Service) { 
    SubService =() ->       var SubService; 
    Service.call(@)       SubService = function() { 
    @           Service.call(this); 
               return this; 
    # Overwrite some stuff on the "Service"  }; 
    Service::basepath = "/environments"   Service.prototype.basepath = "/environments"; 
    Service::model = Environment     Service.prototype.model = Environment; 
               return new SubService(); 
    new SubService()       }); 

Welche auch weniger als ideal ist, abgesehen von hässlich zu sein.

+0

Haben Sie jemals eine Lösung finden Dies? Wir nähern uns auch in ähnlicher Weise, aber es muss einen besseren Weg geben. – forrestranger

+1

Genau aus diesem Grund hat mein Team den ES6 für unsere eckigen Dinge noch nicht gemacht, wir hoffen, dass dies irgendwie in der Typoskript-Bewegung in ng-2.0 angesprochen wird, aber wir sehen nichts, das löst das noch nicht. –

+0

Wie in den meisten anderen Bereichen auch, ist es in AngularJS einfacher und lesbarer, die Komposition über die Vererbung zu verwenden. – Thomas

Antwort

2

es ist nicht ES6 (es ist ES7), aber es könnte nur schweben Ihr Boot

ich in angular-decorators von MikeRyan52 aussehen würde.

hat er zusammen eine @inject Dekorateur, der wie folgt funktioniert:

@inject('$http', '$rootScope') 
class SomeClass { 
    constructor($http, $rootScope) { 

    } 
} 

@inject('$q') 
class SubClass extends SomeClass { 
    constructor($q, ...parentDependencies) { /** parent dependencies caught with a rest parameter **/ 
    super(...parentDependencies); 
    } 
} 

the implementation of @inject

+0

großartig, danke für diesen Tipp, ich denke, wenn Sie anfangen, angular2 Funktionen zurück zu eckigen zu portieren, könnte es besser sein, die Zeit zu investieren, um zu aktualisieren :) aber immer noch, fantastisch zu sehen, eine Proof of Concept, und die Wahl haben. –

0

dies von SubService.js zuunterst hinzufügen

SubService.$inject = ['$http', '$q', '$etc', '$more', '$di', '$things', '$here'];