Pull to refresh

Comments 4

Я у себя классы сделал как-то так:
export default class Injectable {
  constructor ($injector){
    this._$injector = $injector;
  }

  di (){
    var args = _.map(arguments, _.clone);

    if(args.length == 1){
      return this._$injector.get(args[0]);
    }

    if(args.length > 1){
      return _.map(args, function(arg) {
        return this._$injector.get(arg);
      }, this);
    }
  }
}

export default class NgController {
  constructor ($scope, $injector){
    this._scope = $scope;
    this._$injector = $injector;

    this.log = this._$injector.get('$log');
  }

  /**
   *
   * @returns {...String} dependency
   */
  di (dependency){
    var args = _.map(arguments, _.clone);

    if(args.length == 1){
      return (this._resolves.hasOwnProperty(args[0]) && this._resolves[args[0]]) ||
        this._$injector.get(args[0]);
    }

    if(args.length > 1){
      return _.map(args, function(arg) {
        return (this._resolves.hasOwnProperty(arg) && this._resolves[arg]) ||
          this._$injector.get(arg)
      }, this);
    }
  }

  /**
   * @param {String} dependency
   */
  resolve (dependency){
    return this._$injector.get('$state').$current.locals.globals[dependency];
  }
}



Использую так:
export default class MyController extends NgController {
  /** @ngInject */ constructor($scope, $injector) {
    super($scope, $injector);
    var [MyService1, MyService2] = this.di('MyService1', 'MyService2');
    MyService1.doSomething();

    var data = this.resolve('preloaded'); // Вытаскивает данные resolve-секции роутов. Использую ui.router
  }
}


Все-таки основное преимущество классов в ES6 это как раз наследование без костылей, не использовать его как минимум странно.
Именно поэтому сервисы я не стал делать классами — попробовал, да мороки больше, не возникало кейсов, где их надо наследовать.

P.S. Ну и ngAnnotate наше все, прекрасно работает с /** @ngInject */ constructor() {}
@ngInject это фишка closure компилятора или не только?
Это фишка ngAnnotate плагина. Он есть, в том числе, в виде процессора browserify.
Насколько я понял в основном статья о том как обернуть сущности в es2015 класса. Тема конечно актуальная и информация полезная, но по хорошему сама команда angular`а должна была бы предоставить базовые классы всех основных сущностей. Так как без этого происходит велосипедостроение (автор предлагает один подход, в комментариях предлагают другой, наверняка есть ещё 100500) и атомизация опыта.

Что касается сборки, то в контексте ангуляра (на котором часто пишут SPA) по моему актуальная задача не просто собрать всю кодовую базу в один файл (как это делает browserify), а разбить зависимости на отдельные бандлы (бандл с зависимостями серивса1, с зависимостями серивса2 (сервис для примера, зависит от того на какие логические части приложения должны подгружаться динамически)).
Sign up to leave a comment.

Articles