Preguntas frecuentes

¿Por qué los archivos Javascript están creados dentro de una función?

En Javascript, existe el concepto de Closure. En este caso, los closure se usan para poder crear variables privadas (como por ejemplo cuando se crea un módulo) y evitar que las mismas sean creadas en el objeto window. Esto tambien ayuda a optimizar el uso de la memoria.

var a = 1;
console.log(a); //imprime 1
console.log(window.a); //imprime 1

(function(){
    var b = 1;
    console.log(b); //imprime 1
    console.log(window.b); //imprime undefined
})();

¿Cómo funcionan las directivas?

En AngularJS existe el concepto de directiva. Las directivas son la manera de extender HTML para que éste pueda dar una idea de lo que hace la aplicación. Igualmente con las directivas es posible reutilizar componentes HTML, aumentando la facilidad de modificación.

Enlace del scope: En las directivas es posible definir un scope aislado, al cual se le puede asignar valores desde el contenedor de la directiva. De esta manera, se puede conectar con componentes exteriores a ella. (Ver $compile)

Existen tres manera de configurar los parámetros recibidos:

  • @: Los elementos del scope definidos con este símbolo indican que el parámetro escrito en la directiva se tomará como texto plano.
  • =: Indica que el parámetro es una variable.
  • &: Indica que el parámetro es una función. Cuando se ejecute la función dentro de la directiva, esto se hará con el contexto definido en el contenedor externo.

¿Cómo llamo a un servicio desde un controlador?

Para llamar a un servicio desde un controlador basta con realizar la inyección del mismo en la definición del controlador. La inyección de dependencias de AngularJS funciona a partir del nombre de cada componente (el cual debe ser único en toda la aplicación).

mod.controller('sportCtrl', ['countryService', function (countryService) {
            //...
        }]);

¿Cómo registro un nuevo módulo de AngularJS?

Para registrar un módulo en AngularJS es necesario invocar el servicio angular.module pasando dos parámetros

  1. Nombre del módulo: Este parámetro define el nombre que tendrá el módulo en la aplicación. Los nombres de los módulos deben ser siempre únicos en toda la aplicación.
  2. Dependencias: Este parámetro es un arreglo de string donde cada elemento es el nombre del módulo del cual depende aquel que se está creando. En caso de no depender de ningún módulo, este parámetro debe estar presente como un arreglo vacío

Ejemplo sin dependencias: angular.module('mi_modulo1', []); Ejemplo con dependencias: angular.module('mi_modulo2', ['ui-bootstrap'];

Importante: cuando no se usa el segundo parámetro, AngularJS entiende que se está solicitando un módulo ya creado. En caso de hacer esto y no exista un módulo con el nombre, se obtiene error.

¿Cómo solicito un registro específico a partir de su ID?

Para obtener un objeto con Restangular, esto se puede realizar con su id y el objeto api creado en el servicio de la entidad.

Dentro del servicio podemos crear una función que retorne la promesa de la solicitud de un registro por su id:

this.getRecordById = function(id){
    return this.api.get(id);
};