Kontekst, obecna implementacja klas/modułów w naszej aplikacji to common.js i klasy CoffeeScript. Desperacko szukam rozwiązania do pracy z ES6 lub TypeScript, ale problem pozostaje.Angular.js DI z klasami (ES6) i dziedziczeniem
Jak wykonać DI z dziedziczeniem klas za pomocą Angular-1.x?
względu na kod:
// 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 }
Trzeba w SubService
tutaj przedefiniować wszystkie wymagania rodzic DI, aby skutecznie wywołać super()
?
Jesteśmy obecnie robi coś podobnego do następującego:
// 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() });
który jest również mniej niż idealne, poza tym, że brzydkie.
Czy kiedykolwiek znaleźć rozwiązanie to? Zbliżamy się do tego w podobny sposób, ale musi być lepszy sposób. – forrestranger
Dokładnie z tego powodu, mój zespół nie przeszedł jeszcze na ES6 dla naszych kanciastych rzeczy, mamy nadzieję, że zostanie to w jakiś sposób rozwiązane w ruchu maszynopisującym w ng-2.0, ale nie widzimy niczego, co rozwiązałoby to jeszcze. –
Podobnie jak w większości innych miejsc, w AngularJS myślę, że jest łatwiejsze i bardziej czytelne w użyciu kompozycji niż w dziedziczeniu. – Thomas