Зацените ангулярское чудо! (Здрасте всем кстати :) )
Фрагмент кода из angular2.0 alpha35
Зверская оптимизация :)
try {
d0 = length > 0 ? this._getByDependency(binding, deps[0], visibility) : null;
d1 = length > 1 ? this._getByDependency(binding, deps[1], visibility) : null;
d2 = length > 2 ? this._getByDependency(binding, deps[2], visibility) : null;
d3 = length > 3 ? this._getByDependency(binding, deps[3], visibility) : null;
d4 = length > 4 ? this._getByDependency(binding, deps[4], visibility) : null;
d5 = length > 5 ? this._getByDependency(binding, deps[5], visibility) : null;
d6 = length > 6 ? this._getByDependency(binding, deps[6], visibility) : null;
d7 = length > 7 ? this._getByDependency(binding, deps[7], visibility) : null;
d8 = length > 8 ? this._getByDependency(binding, deps[8], visibility) : null;
d9 = length > 9 ? this._getByDependency(binding, deps[9], visibility) : null;
d10 = length > 10 ? this._getByDependency(binding, deps[10], visibility) : null;
d11 = length > 11 ? this._getByDependency(binding, deps[11], visibility) : null;
d12 = length > 12 ? this._getByDependency(binding, deps[12], visibility) : null;
d13 = length > 13 ? this._getByDependency(binding, deps[13], visibility) : null;
d14 = length > 14 ? this._getByDependency(binding, deps[14], visibility) : null;
d15 = length > 15 ? this._getByDependency(binding, deps[15], visibility) : null;
d16 = length > 16 ? this._getByDependency(binding, deps[16], visibility) : null;
d17 = length > 17 ? this._getByDependency(binding, deps[17], visibility) : null;
d18 = length > 18 ? this._getByDependency(binding, deps[18], visibility) : null;
d19 = length > 19 ? this._getByDependency(binding, deps[19], visibility) : null;
} catch (e) {
if (e instanceof AbstractBindingError) {
e.addKey(this, binding.key);
}
throw e;
}
var obj;
try {
switch (length) {
case 0:
obj = factory();
break;
case 1:
obj = factory(d0);
break;
case 2:
obj = factory(d0, d1);
break;
case 3:
obj = factory(d0, d1, d2);
break;
case 4:
obj = factory(d0, d1, d2, d3);
break;
case 5:
obj = factory(d0, d1, d2, d3, d4);
break;
case 6:
obj = factory(d0, d1, d2, d3, d4, d5);
break;
case 7:
obj = factory(d0, d1, d2, d3, d4, d5, d6);
break;
case 8:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7);
break;
case 9:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8);
break;
case 10:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9);
break;
case 11:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10);
break;
case 12:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11);
break;
case 13:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12);
break;
case 14:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13);
break;
case 15:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14);
break;
case 16:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15);
break;
case 17:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16);
break;
case 18:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17);
break;
case 19:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18);
break;
case 20:
obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18, d19);
break;
}
}
|
DjDiablo, а вот вторая половина кода.
![]() |
DjDiablo, лично я весьма скептически отношусь к версии 2.0. Что касается 1.х.х, то она уже надоела :D
Надоело писать обертки вида (см. под спойлером) для обновления скопа.
'use strict';
let {identity} = angular;
export default ($window, $q) => {
const {localforage} = $window;
const __FORAGE = Symbol();
return class LocalForage {
/**
* @param {Object} options
* @param {String} options.name
* @param {String} options.storeName
* @see [url]https://github.com/mozilla/localForage/issues/245#issuecomment-56895736[/url]
* @see [url]http://mozilla.github.io/localForage/#config[/url]
*/
constructor(options) {
this[__FORAGE] = localforage.createInstance(options);
}
/**
* @see [url]http://mozilla.github.io/localForage/#getitem[/url]
* @param {String} key
* @returns {Promise}
*/
get(key) {
let deferred = $q.defer();
this[__FORAGE].getItem(key).then(deferred.resolve, deferred.reject);
return deferred.promise;
}
/**
* @see [url]http://mozilla.github.io/localForage/#setitem[/url]
* @param {String} key
* @param {*} value
* @returns {Promise}
*/
set(key, value) {
let deferred = $q.defer();
this[__FORAGE].setItem(key, value).then(deferred.resolve, deferred.reject);
return deferred.promise;
}
/**
* @see [url]http://mozilla.github.io/localForage/#removeitem[/url]
* @param {String} key
* @returns {Promise}
*/
remove(key) {
let deferred = $q.defer();
this[__FORAGE].removeItem(key).then(deferred.resolve, deferred.reject);
return deferred.promise;
}
/**
* @see [url]http://mozilla.github.io/localForage/#clear[/url]
* @returns {Promise}
*/
clear() {
let deferred = $q.defer();
this[__FORAGE].clear().then(deferred.resolve, deferred.reject);
return deferred.promise;
}
/**
* @see [url]http://mozilla.github.io/localForage/#length[/url]
* @returns {Promise}
*/
length() {
let deferred = $q.defer();
this[__FORAGE].length().then(deferred.resolve, deferred.reject);
return deferred.promise;
}
/**
* [url]http://mozilla.github.io/localForage/#key[/url]
* @param {Number} index
* @returns {Promise}
*/
key(index) {
let deferred = $q.defer();
this[__FORAGE].key(index).then(deferred.resolve, deferred.reject);
return deferred.promise;
}
/**
* @see [url]http://mozilla.github.io/localForage/#iterate[/url]
* @param {Function} callback
* @returns {Promise}
*/
each(callback) {
let deferred = $q.defer();
this[__FORAGE].iterate(callback).then(deferred.resolve, deferred.reject);
return deferred.promise;
}
/**
* @see [url]http://mozilla.github.io/localForage/#keys[/url]
* @returns {Promise}
*/
keys() {
let deferred = $q.defer();
this[__FORAGE].keys().then(deferred.resolve, deferred.reject);
return deferred.promise;
}
/**
* @returns {Promise}
*/
values() {
let stack = [];
let onEach = (value) => {
stack.push(value);
};
let onResolved = () => stack;
return this.each(onEach).then(onResolved, identity);
}
};
}
module.exports.$inject = [
'$window',
'$q'
];
Планирую на vue.js переезжать. Там все чисто и прозрачно в большинстве своем. Нет провайдеров, сервисов, фабрик, констант и иже с ним. |
Цитата:
|
Цитата:
Поделись впечатлениями: что нравиться, что не нравиться в либе? |
Цитата:
Из минусов: слабое комьюнити и мало сторонних плагинов и т.д. Бурное развитие либы: каждая новая версия ломает обратную совместимость (но скоро 1.0, надеюсь будет стабилизация). Также огорчает отсутствие API для асинхронных операций, типо там this.$setTimeout и т.д. Собираюсь сделать плагинчик по этой теме. Такие вот дела. |
| Часовой пояс GMT +3, время: 11:45. |