¡Esta es una revisión vieja del documento!
En este tema retornamos el ejemplo del seguro médico para añadir el servicio de rutas y de paso hacer otros cambios que ya podemos hacer.
La lista de modificaciones a realizar es la siguiente:
idSeguroget del servicio remoteResource acepte como argumento el idSeguro.main.htmlindex.html.resolveresolveAhora el formato de los datos JSON es el siguiente:
{
"idSeguro": 3,
"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": ""
}
}
Hemos hecho este cambio ya que ahora se podrán obtener los datos de un seguro concreto usando la propiedad idSeguro para obtenerlo.
Ahora en vez de tener un solo fichero llamado datos.json tenemos 8 ficheros distintos llamados:
datos1.jsondatos2.jsondatos3.json
Eso nos permite que desde el método get del servicio remoteResource acepte como argumento el idSeguro y podemos ya leer solo los datos que queremos.
El método get ahora queda de la siguiente forma
this.get = function(idSeguro) {
var defered=$q.defer();
var promise=defered.promise;
$http({
method: 'GET',
url: baseUrl + '/datos' + idSeguro + '.json'
}).success(function(data, status, headers, config) {
defered.resolve(data);
}).error(function(data, status, headers, config) {
defered.reject(status);
});
return promise;
}
idSeguro
$htpp
Al añadir la rutas, la página index.html solo contiene las partes comunes a todas las páginas, como la cabecera y el pie. Por ello es necesario añadir una nueva página llamada main.html que será la que se muestre inicialmente.
El contenido de esta página es solamente el enlace para mostrar listado.html.
<a href="#/seguro/listado" >Listado de seguros medicos</a>
A la página listado.html se accede mediante la ruta /seguro/listado.
Ahora vamos a añadir las rutas para poder navegar a las 3 páginas:
main.htmllistado.htmldetalle.html
app.config(['$routeProvider',function($routeProvider) {
$routeProvider.when('/', {
templateUrl: "main.html",
controller: "MainController"
});
$routeProvider.when('/seguro/listado', {
templateUrl: "listado.html",
controller: "ListadoSeguroController"
});
$routeProvider.when('/seguro/edit/:idSeguro', {
templateUrl: "detalle.html",
controller: "DetalleSeguroController"
});
$routeProvider.otherwise({
redirectTo: '/'
});
}]);
Vemos creado las 3 rutas para las 3 páginas.
El path de la ruta de listado.html se llamada /seguro/listado en vez de únicamente /listado. Se ha hecho este cambio ya que así las rutas están mucho mas organizadas. ¿Que pasaría si tuviéramos mas de un listado de otras entidades? Por ello es mejor añadir delante /seguro. Lo mismo pasa con el path de la ruta de detalle.html.
También en el path de la ruta de detalle.html se ha añadido el parámetro idSeguro. Esto nos permitirá que al ir a la página ya solo se muestren los datos del seguro definido en el parámetro idSeguro en vez de el mismo como se hacía hasta ahora.
Al añadir las rutas hemos tenido que hacer otros 2 cambios:
angular-route.min.js en index.html
<script src='//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular-route.min.js'></script>
ngRoute
var app = angular.module("app", ['ngRoute']);
Ahora ya no es necesario incluir la cabecera ni el pie en listado.html ni en detalle.html ya que ahora siempre se muestran dentro de index.html
En index.html hemos añadido la directiva ng-view para indicar que las páginas se muestren entre la cabera y el pie.
<!DOCTYPE html> <html ng-app="app"> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.js"></script> <script src='//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular-route.min.js'></script> <script src="//code.angularjs.org/1.2.19/i18n/angular-locale_es-es.js"></script> <script src="script.js"></script> </head> <body ng-controller="MainController"> <ng-include src="'cabecera.html'"></ng-include> <div ng-view></div> <ng-include src="'pie.html'"></ng-include> </body> </html>
ng-view para que aquí se muestren las otras páginas.
Como ya tenemos rutas y parámetros, desde la página de listado.html ahora se podrá navegar a detalle.html para ver el detalle de cada uno de los seguros.
Para ello solo hemos añadido un link con la ruta correspondiente a detalle.html.
Filtrar por apellido:<input ng-model="filtro.ape1" >
<table>
<thead>
<tr>
<th>NIF</th>
<th>Nombre</th>
<th>Apellido</th>
<th>Sexo</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="3">El Nº de seguros medicos es:</td>
<td ng-bind="seguros.length"></td>
</tr>
</tfoot>
<tbody>
<tr ng-repeat="seguro in seguros| filteri18n:{ape1:filtro.ape1}" ng-style="{color:($odd?'red':'green')}">
<td><a ng-href="#/seguro/edit/{{seguro.idSeguro}}">{{seguro.nif}}</a></td>
<td>{{seguro.nombre}}</td>
<td>{{seguro.ape1}}</td>
<td ng-switch on="seguro.sexo">
<span ng-switch-when="H">Hombre</span>
<span ng-switch-when="M">Mujer</span>
<span ng-switch-when=""></span>
<span ng-switch-default>Desconocido</span>
</td>
</tr>
</tbody>
</table>
/seguro/edit/:idSeguro. Y fíjate que hay que incluir la almohadilla ”#” al inicio de la ruta. Esto es lo que permite que al pinchar se vaya a la página de detalle.html y se vean todos los datos del seguro.