Комментарии 4
Я у себя классы сделал как-то так:
Использую так:
Все-таки основное преимущество классов в ES6 это как раз наследование без костылей, не использовать его как минимум странно.
Именно поэтому сервисы я не стал делать классами — попробовал, да мороки больше, не возникало кейсов, где их надо наследовать.
P.S. Ну и ngAnnotate наше все, прекрасно работает с /** @ngInject */ constructor() {}
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() {}
Насколько я понял в основном статья о том как обернуть сущности в es2015 класса. Тема конечно актуальная и информация полезная, но по хорошему сама команда angular`а должна была бы предоставить базовые классы всех основных сущностей. Так как без этого происходит велосипедостроение (автор предлагает один подход, в комментариях предлагают другой, наверняка есть ещё 100500) и атомизация опыта.
Что касается сборки, то в контексте ангуляра (на котором часто пишут SPA) по моему актуальная задача не просто собрать всю кодовую базу в один файл (как это делает browserify), а разбить зависимости на отдельные бандлы (бандл с зависимостями серивса1, с зависимостями серивса2 (сервис для примера, зависит от того на какие логические части приложения должны подгружаться динамически)).
Что касается сборки, то в контексте ангуляра (на котором часто пишут SPA) по моему актуальная задача не просто собрать всю кодовую базу в один файл (как это делает browserify), а разбить зависимости на отдельные бандлы (бандл с зависимостями серивса1, с зависимостями серивса2 (сервис для примера, зависит от того на какие логические части приложения должны подгружаться динамически)).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Использование ES6 в AngularJs 1.x со сборкой Browserify+Babel