¡Esta es una revisión vieja del documento!


4.12 Ejemplo de mas directivas

En este tema retornamos el ejemplo del seguro médico para añadir varias de las directivas que hemos visto.

La lista de modificaciones a realizar es la siguiente:

  • Modificar el desplegable de “Sexo” para que use ng-options
  • Añadir una cabecera y un pie:
    • Usaremos ng-include.
    • En la cabecera añadiremos una imagen usando ng-src
  • Añadir en el servicio remoteResource el obtener una lista de seguros médicos
  • Añadir una página llamda “listado.html” para ver todos los seguros médicos que ya existen
    • ng-repeat para crear la tabla
    • Enlazaremos los datos con ng-bind
    • Añadiremos links a la tabla usando ng-href
    • Cambiaremos el estilo usando ng-class
    • Usaremo ng-switch para mostrar el nombre del sexo en la tabla
  • Mover el formulario a la página “detalle.html”
  • Hacer que la página principal permita ir a las página de “listado.html” y “detalle.html”
  • Quitar las referencias a la imagen de cada controlador y ponerlos en el $rootScope

Select con ng-options

En el tag <select> vamos a usar la directiva ng-options. Lo primero es incluir en el $scope la propidad sexos con los posibles valores del <select>.

    $scope.sexos= [
      {
        codSexo:"H",
        descripcion:"Hombre"
      },{
        codSexo:"M",
        descripcion:"Mujer"
      }
    ];

Y modificar el <select> de la siguiente forma para incluir ng-options:

<select id="sexo" name="sexo" type="checkbox" ng-model="seguro.sexo" ng-options="sexo.codSexo as sexo.descripcion for sexo in sexos" ><option value="">--Elige opcion--</option></select>

Cabecera y pie

Vamos a añadir una cabecera y un pie en ficheros separados para que luego estos ficheros se puedan reusar en otras páginas y para que el código sea más ordenado.

<div>&copy; Seguros medicos S.A.</div>
Creamos el fichero con el contenido del pie.

<div>
  <h1><img ng-src="{{urlLogo}}" /> Seguro medico</h1>
</div>
Creamos el fichero con el contenido de la cabecera y vemos como la URL de la imagen es la propiedad urlLogo del $scope.

Así que añadimos la propiedad al $scope

$scope.urlLogo="http://www.cursoangularjs.es/lib/exe/fetch.php?cache=&media=unidades:04_masdirectivas:medical14.png";

Ahora en la página index.html añadimos los ng-include al pie y a la cabecera:

  <body ng-controller="SeguroController">
  
    <ng-include src="'cabecera.html'" ></ng-include>
    
    <form> 
    </form>
    
    <ng-include src="'pie.html'" ></ng-include>
  </body>
No se muestra el contenido del tag <form> ni del tag <head> para mejorar la legibilidad

Metodo list del servicio

Vamos a añadir el método list al servicio remoteResource para poder obtener una lista de seguros médicos.

Los datos como en el caso del método get se van a obtener de un fichero estático en formato JSON llamado listado_seguros.json

Un fragmento del fichero es el siguiente:

[{
  "nif": "12345678Z",
  "nombre": "Carlos",
  "ape1": "Cano",
  "edad": 41,
  "sexo": "H",
  "casado": true,
  "numHijos": 3,
  "embarazada": false,
  "coberturas": {
    "oftalmologia": true,
    "dental": false,
    "fecundacionInVitro": false
  },
  "enfermedades": {
    "corazon": true,
    "estomacal": false,
    "rinyones": false,
    "alergia": true,
    "nombreAlergia": "Acaros"
  }
}, {
  "nif": "34783627Z",
  "nombre": "Catalina",
  "ape1": "López",
  "edad": 33,
  "sexo": "M",
  "casado": true,
  "numHijos": 1,
  "embarazada": true,
  "coberturas": {
    "oftalmologia": false,
    "dental": false,
    "fecundacionInVitro": false
  },
  "enfermedades": {
    "corazon": false,
    "estomacal": false,
    "rinyones": false,
    "alergia": false,
    "nombreAlergia": ""
  }
}, {
  "nif": "29069345J",
  "nombre": "Jose",
  "ape1": "Aguado",
  "edad": 56,
  "sexo": "H",
  "casado": true,
  "numHijos": 2,
  "embarazada": false,
  "coberturas": {
    "oftalmologia": true,
    "dental": true,
    "fecundacionInVitro": false
  },
  "enfermedades": {
    "corazon": true,
    "estomacal": true,
    "rinyones": true,
    "alergia": false,
    "nombreAlergia": ""
  }
}]

Vemos que ahora en vez de ser un objeto JSON es un array JSON ya que empieza por ”[” y acaba por ”]” y dentro hay varios objetos separados por comas.

La modificación del servicio es muy sencilla ya que solo hay que añadir un nuevo método que es prácticamente igual al que ya había.

function RemoteResource($http,baseUrl) {
  this.get=function(fnOK,fnError) {
        $http({
          method: 'GET', 
          url: baseUrl+'/datos.json'
        }).success(function(data, status, headers, config) {
            fnOK(data);
        }).error(function(data, status, headers, config) {
            fnError(data,status);
        });
      }
  this.list=function(fnOK,fnError) {
        $http({
          method: 'GET', 
          url: baseUrl+'/listado_seguros.json'
        }).success(function(data, status, headers, config) {
            fnOK(data);
        }).error(function(data, status, headers, config) {
            fnError(data,status);
        });
      }
}

  • Linea 12: Hemos añadido el método list. La única diferencia por ahora con el método get es que el fichero que obtiene se llama listado_seguros.

La imagen en el $rootScope

En cada uno de los controladores habría que poner en su $scope la propiedad urlLogo con la URL de la imagen.

Para evitar hacerlo en todos los controladores lo ponemos únicamente en el $rootScope y además usamos una contante para guardar su valor.

app.value("urlLogo","http://www.cursoangularjs.es/lib/exe/fetch.php?cache=&media=unidades:04_masdirectivas:medical14.png");
app.run(["$rootScope","urlLogo",function($rootScope,urlLogo) {
    $rootScope.urlLogo=urlLogo;
}]);

Ejemplo

Ahora juntamos todos los cambios en el siguiente ejemplo.

unidades/04_masdirectivas/12_ejemploseguro.1407192148.txt.gz · Última modificación: 2014/08/05 00:42 por admin
Ir hasta arriba
CC Attribution-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0