meanjs/05-tres-vistas-un-controlad.../movimientosFactory.js

53 строки
1.8 KiB
JavaScript
Исходник Постоянная ссылка Обычный вид История

2015-10-13 21:05:11 +03:00
(function () {
2015-11-20 11:50:18 +03:00
// Las factorías, y los servicios, son funciones estándar
// Una gran diferencia con los controladores es que son singleton
// Eso los convierte en un buen lugar para compartir datos
var movimientosFactory =   function ()  {
// el array de movimientos y el total lo mantiene la factoría
// de esta forma sobrevive a las recargas de controladores
var movimientos = [];
// Normalmente estos datos se persisten en servidores remotos
// o al menos se almacenan en el browser
var total = {
ingresos: 0,
gastos: 0
};
// las factorias siempre devuelven objetos, para eso son fábricas
2015-10-13 21:05:11 +03:00
// en este caso le llamo result
2015-11-20 11:50:18 +03:00
// Estos objetos pueden contener funciones de lógica reutilizables
var result  =   {};
2015-10-13 21:05:11 +03:00
2015-11-20 11:50:18 +03:00
/** lista de los movimientos actuales */
result.getMovimientos =   function ()  {
return movimientos;
};
/** objeto total actual */
result.getTotal =   function ()  {
return total;
};
/** guardar un nuevo movimiento */
result.postMovimiento =   function (movimiento)  {
movimiento.tipo = tipo(movimiento);
movimientos.push(movimiento);
console.log(movimiento);
total.ingresos += movimiento.esIngreso * movimiento.importe;
total.gastos += movimiento.esGasto * movimiento.importe;
};
/** acceso al balance */
result.balance = function () {
return total.ingresos - total.gastos
}
2015-10-13 21:05:11 +03:00
2015-11-20 11:50:18 +03:00
/** función privada auxiliar para trasnformar el tipo de movimiento */
var tipo = function (movimiento) {
return movimiento.esIngreso && 'Ingreso' || 'Gasto'
}
2015-10-13 21:05:11 +03:00
2015-11-20 11:50:18 +03:00
// Exponemos funcionalidad devolviendo el objeto creado,
// para que el cliente explote sus métodos
return result;
};
// se registran dentro de un módulo con la palabra clave factory
angular.module('cashFlow').factory('movimientosFactory', movimientosFactory);
}());