2015-03-12 32 views
14

Arka plan, uygulamamızdaki sınıfların/modüllerin geçerli uygulaması common.js ve CoffeeScript sınıflarıdır. Çaresizce ES6 veya TypeScript ile çalışmak için bir çözüm arıyorum, ama sorun kalır.(ES6) sınıfları ve devralma ile Angular.js DI

Angular-1.x kullanarak sınıf kalıtımıyla DI nasıl yapılır? Burada SubService başarıyla super() çağırmak için tüm üst DI gereksinimlerini yeniden tanımlamak,

// 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 } 

Must tek:

kodunu göz önüne alındığında?

// 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()       }); 

çirkin olmaktan yana, ideal daha da azdır: Biz şu anda aşağıdaki benzer bir şey yapıyoruz

.

+0

en altında bu eklentiyi şu şekildedir:

O arada çalışan bir @inject dekoratör koydu bu? Aynı şekilde yaklaşıyoruz ama daha iyi bir yolu olmalı. – forrestranger

+1

Bu nedenle tam olarak benim takımım açısal işlerimiz için ES6'ya geçiş yapmadı, biz bunun ng-2.0'deki yazı tipinde bir şekilde ele alınacağını umuyoruz, ancak çözen hiçbir şey görmüyoruz bu henüz. –

+0

Diğer pek çok yerde olduğu gibi, AngularJS'de daha kolay ve daha okunaklı bir şekilde miras üzerinden kompozisyon kullanmayı düşünüyorum. – Thomas

cevap

2

o ES6 (o ES7 var) değil, ama sadece sizin tekne

Ben MikeRyan52 tarafından angular-decorators içine bakmak istiyorum yüzer olabilir.

@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

harika, bu bahşiş için teşekkürler, angular açısal angular geri backporting başladığınızda düşünüyorum, yükseltme için zaman yatırım yapmak daha iyi olabilir :) ama yine de, bir kanıt kanıt görmek için harika ve bir seçim var. –

0

Hiç bir çözüm buldunuz SubService.js

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