If you don't use any module system with module bundler (like webpack, browserify) or module loader (like systemjs) then yes. For angular1 it is main way to work.
In my app I just created factories like arrayUtils
, numberUtils
, domUtils
, dateUtils
and inject them when I need any function from it.
Example:
date-utils-module.js
(function () {
'use strict';
/* @ngdoc object
* @name components.dateUtils
* @description
*
*/
angular
.module('components.dateUtils', [
'angularMoment'
]);
}());
date-utils-factory.js
(function () {
'use strict';
/**
* @ngdoc service
* @name components.dateUtils.factory:dateUtils
*
* @description
*
*/
angular
.module('components.dateUtils')
.factory('dateUtils', dateUtilsFactory);
function dateUtilsFactory(moment) {
var dateUtils = {
range: range
};
return dateUtils;
/**
* Возвращает строку, содержащую текстовое представления диапазона дат.
* Например (считая, что сейчас 2015 год):
* <pre>
* чт, 31 декабря, 17:30 – ∞
∞ – пт, 1 января 2016, 21:30
чт, 31 декабря, 17:30 – пт, 1 января 2016, 09:00
чт, 31 декабря, 17:30 – 21:30
* </pre>
* @param date1 первая дата
* @param date2 вторая дата
*
* @returns строка с диапазоном дат.
*/
function range(date1, date2) {
var now = moment(),
m1 = moment(date1 || null),
m2 = moment(date2 || null),
t1 = '∞',
t2 = '∞';
if (m1.isValid()) {
// t1 = m1.calendar();
t1 = m1.isSame(now, 'year') ? m1.format('dd, D MMMM, HH:mm') : m1.format('dd, D MMMM YYYY, HH:mm');
}
if (m2.isValid()) {
// t2 = m1.isSame(m2, 'day') ? m2.format('HH:mm') : m2.calendar();
t2 = m2.isSame(m1, 'day') ? m2.format('HH:mm') :
m2.isSame(now, 'year') ? m2.format('dd, D MMMM, HH:mm') : m2.format('dd, D MMMM YYYY, HH:mm');
}
return t1 + ' – ' + t2;
}
}
}());