Comments
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() {}
@ngInject это фишка closure компилятора или не только?
Это фишка ngAnnotate плагина. Он есть, в том числе, в виде процессора browserify.
Насколько я понял в основном статья о том как обернуть сущности в es2015 класса. Тема конечно актуальная и информация полезная, но по хорошему сама команда angular`а должна была бы предоставить базовые классы всех основных сущностей. Так как без этого происходит велосипедостроение (автор предлагает один подход, в комментариях предлагают другой, наверняка есть ещё 100500) и атомизация опыта.
Что касается сборки, то в контексте ангуляра (на котором часто пишут SPA) по моему актуальная задача не просто собрать всю кодовую базу в один файл (как это делает browserify), а разбить зависимости на отдельные бандлы (бандл с зависимостями серивса1, с зависимостями серивса2 (сервис для примера, зависит от того на какие логические части приложения должны подгружаться динамически)).
Что касается сборки, то в контексте ангуляра (на котором часто пишут SPA) по моему актуальная задача не просто собрать всю кодовую базу в один файл (как это делает browserify), а разбить зависимости на отдельные бандлы (бандл с зависимостями серивса1, с зависимостями серивса2 (сервис для примера, зависит от того на какие логические части приложения должны подгружаться динамически)).
Only those users with full accounts are able to leave comments. Log in, please.
Использование ES6 в AngularJs 1.x со сборкой Browserify+Babel