2015-03-12 2 views
14

Фон, текущая реализация классов/модулей в нашем приложении является классом common.js и CoffeeScript. Я отчаянно ищу решение для работы с ES6 или TypeScript, но проблема остается.Angular.js DI с классами (ES6) и наследованием

Как сделать DI с наследованием класса с помощью Angular-1.x?

Учитывая код:

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

должен один, в SubService здесь переопределить все требования родительского DI для того, чтобы успешно назвать super()?

Мы в настоящее время сделать что-то похожее на следующее:

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

который также меньше, чем идеал, в стороне от некрасиво.

+0

ли вы когда-нибудь найти решение это? Мы также приближаемся к нему аналогичным образом, но должен быть лучший способ. – forrestranger

+1

Именно по этой причине моя команда еще не сделала переход на ES6 для наших угловых вещей, мы надеемся, что это как-то будет рассмотрено в машинописном перемещении в ng-2.0, но мы не видим ничего, что решает это еще. –

+0

Как и в большинстве других мест, в AngularJS я считаю его более простым и понятным для использования композиции над наследованием. – Thomas

ответ

2

это не ES6 (это ES7), но это как раз может плавать ваша лодка

Я хотел бы посмотреть в angular-decorators по MikeRyan52.

Он собрал @inject декоратора, который работает следующим образом:

@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

отлично, спасибо за подсказку, я думаю, что когда вы начнете backporting угловые2 возвращается обратно к угловому, возможно, лучше потратить время на обновление :), но все же, удивительно видеть доказательство концепции и иметь выбор. –

0

добавить это в самом низу SubService.js

SubService.$inject = ['$http', '$q', '$etc', '$more', '$di', '$things', '$here']; 
Смежные вопросы