0% encontró este documento útil (0 votos)
36 vistas

Manual de AngularJS

Manual de AngularJS

Cargado por

Johana Ramos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
36 vistas

Manual de AngularJS

Manual de AngularJS

Cargado por

Johana Ramos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Está en la página 1/ 70
Manual de AngularJS Este es un manual que nos introduce en el framework Javascript AngularJS, un conjunto de librerias de cédigo abierto que nos sirven para hacer aplicaciones web avanzades del lado del cliente. Es ideal para hacer aplicaciones de negocio y aplicaciones de gestion que se despliegan en una Unica pagina. Usa el patron de disefio habitualmente encontrado en el desarrollo web MVC, aunque en una variante Uamada a veces MV" y a veces MVM. Esto, junto con otras herramientas disponibles en Angular nos permite un desarrollo ordenado, sencillo de realizar y sobre todo mas facil de mantener en un futuro. AngularJS esté qpoyado por Google y cada dia més desarrolladores estén adoptandolo, lo que nos da una idea del prometedor futuro de la libreria. derverrolloweb.com Manual para imprimir Autores del manual Este manual ha tido realizado por lor siguientes colaboradores de DetarrolloWeb.com: ‘Alberto Basalo Miguel Angel Alvarez Pedro Hurtado ‘Albert Beelo os axperto en dovasrip, Miguel os cede do DaserralaWab.com ye Amante da las nevada, dafonsar dea ‘angharJSy ares termlopos pare la web. pataforne de fermectin tine EcublaT. comunidae, Conpertr se fuente Director da Agora Binary crevaores [Ecmanas ana munge et asaraia web an Sottuna. Now eres nou mundo 30 Oseurain, gest documentl amis ube, sho V7, Warstommande su hobby an eu mimo fur erancise. Extrem nue Prowramade, eralistayarautecto de trabaje ler, Dearrltador en Net. Node satovare, e/a cesar com Angular conver yporaue hae eo, tp ainiethvrsaon neh, {Tt capitol coma 1 copies Hin. Zeosks ms/tlog/ohurtadal (eapitate Xavier Jorge Cerda Popar, 2s CTO en Ambiental Intelligence 8 iteration, como darrell Spec ts en tachologias Miro yen Shascrpt, nplsor da ramewrk Anaae itp: /goaks ma/blogs/xarpaper! (espitao) OD aronccicnien Manual de AngularJS - DesarrolloWeb.com & Parte 1: Introduccion AngularJS Esta es una introduccién de manera conceptual al framework Javascript Angular JS. Explicamos por qué cada vez tiene mas importancia el desarrollo de aplicaciones web ‘con alta carga de Javascript y por qué son esenciales este tipo de librerias para una programacion mas sencilla, répida y de facil mantenimiento. Completaremos la introduccién con una practica en la que podremos experimentar con un primer ejemplo fen Angular. 1.1.- Por qué AngularJS Cémo los frameworks Javascript en general y AngularJS en concret actuales de la informatica, en cuanto a desarrollo multiplataforma de aplicaciones grandes 0 enormes que se asemejon a las de exeritorio, sirven para solucionar las necesidades Con este articulo comenzamos una serie dedicada a AngularJS, el framework Javascript MV* que nos permite un desarrollo rapide y potenta de aplicaciones wel hasadas en Javascript del lado del cliente. AngularJS es un conjunto de librerias apoyadas por Google que tiene un futuro muy prometedor y que en estos momentos se encuentra en boca de todos. No se trata de una moda pasajera, sino de una tecnologia que por su utilidad y caracteristicas ha venido para quedarse. ‘Alo largo de varios articulos nos iromos introduciendo on este framework, de una manora bastante practica. Sin embargo vamos a comenzar con una introduccion mas teorica y retrospectiva que nos haga entender el porque de la proliferacién de frameworks Javascript y el motivo por el que Angular es una apuesta segura entre sus competidores. ea OSes Manual de AngularJS - D (Nota: Esta es una transcripcidn libre de la chatla de Alberto Basalo que nos afracié en abierto en un webinar de DesarroloWeb,com Bscuelal El titulo de esta primers parte que ahora te resumimos es "Desarralio d= ‘aplicaciones de negocio y los retosy sluciones de 2024". Al final del artculo podrs ver el vdeo de a chara 1.1.1.- Un poco de historia *El software sigue al hardware”. Esta es una afirmacién que nos indica que programamos para aquellas maquinas en las que vamos a ejecutar los programas. Puede resultar obvio, pero como ejemplo se puede sefialar que no vamos a programar para las "Google Glass’ si aun no las han creado, o si aun no han liberado el SDK. Cuando empezo la informatica en los aitos 60 existian ordenadores arcaicos y como programadares estabas limitado a las posibilidades de éstos. Conforme avanz6 el desarrollo de la informatica aparecieron otros ordenadores. Al principio no estaban conectados entre si ya que no existian las redes locales, ni mucho menos Internet. Como no habia redes estabas limitado a lo que ocurria dentro de esa maquina y quizas los programadores tenian una vida mas sencilla: estas limitaciones provocaban que no tuvieran que preacuparse por ciertas cosas. Incluso las opciones para crear los programas -tecnologias y lenguajes- no eran demasiadas, al contrario, quizas en tu sistema operativo estabas obligado a trabajar con un, Tenguaje o un par de ellos nada mas. Luego aparecioron las redes, aparecié Internet y los ordenadores comenzaron a conectarse entre si. Existen servidores y terminales que ya no son tontos, pero estamos trabajando con lenguajes sencillos, como HTML -al principio ni existia CSS- y ya acercandose al final del milenio aparecen Ienguajes como Javascript capaces de hacer algunas cosas sencillas. 1.1.2.- El reto hoy Hoy la situacién ya no es la que se describe anteriormente, sino que el panorama ha cambiado mucho. Por un lado el abaratamiento de las comunicaciones hace que aparezcan grandes centros de proceso de datos que nos facilitan el acceso a tecnologia de primer orden, lo que se llama la nube. Ahora cualquier empresa, incluso las mas pequefias, tionen la posibilidad de acceder a servidores de aplicaciones, Se ha acabado la "tirania de Windows": hoy existen varios sistemas operativos y se usan para todo tipo do cosas. Los Mac ya no los usan solamente los disefadores, los Linux no son terreno exclusive de los desarrolladores, sino que cualquier persona usa esos sistemas para todo tipo de tareas. Los desarrolladores no pueden centrarse en un nico sistema y limitar el servicio a las personas de determinada plataforma. La cosa no queda ahi, puesto que ya no solo hablamos de ordenadores de escritorio y portatiles, ademas tenemos la tecnologia mévil y los dispositivos como tablets. Yendo todavia un poco mas alla tenemos los televisores inteligentes, las Google Glass y al final de todo, el “Internet of Thing Esta os la foto actual, que es muy distinta a la de las iiltimas décadas. Tenemos la nube con sus innumerables posibilidades y tenamos una infinita gama de ordenadores y dispositivos a los que atender. 1.1.3.- ¢En qué programar? A toda la situacién relatada anteriormente le tenemos que sumar una interminable lista de necesidades en el campo de la informatica y, por supuesto, tecnologias y lenguajes que nos sirven para resolverlas. ¢Programo para la web o para el escritorio? ¢realizo desarrollo nativo 0 multiplataforma? La industria te da soluciones y aporta todo tipo de alternativas, Java, net, Python, RoR, Objective-C y otros mas arcaicos come Cobol, pero es inevitable plantearse cual de ellos es mas adecuado para resolver los problemas. 1.1.4. HTMLS + JS Si quieres realizar un desarrollo que se adapte a todo tipo de sistemas y dispositivos que puedan === ea Manual de AngularJS - DesarrolloWeb.com 4170 Hogar a aparecer, una solucién es buscar algo que sea comin a todos los sistemas y buscar algo que tengas seguridad que lo van a entender todos. Existe un consenso en el mundo de la tecnologia de dar soporte a HTMLS y Javascript. La situacién actual y la industria nos hace pensar que estos lenguajes estaran disponibles en todo sistema donde circule un bit. Por ello, podemos ver a estas tecnologias de estandares abiertos como un caballo ganador. Eso si, HTMLS ~ Javascript compiten con las soluciones nativas y en términos de rendimiento es muy dificil que puodan llegar a equipararse. El lenguaje nativo, ademas, siompre tendra mayor facildad de acceso a las caracteristicas especificas y funcionalidades del dispositive. ‘Tambign compite con los lenguajes mas clasicos como C, PHP, Java donde hay ya muchi ya realizado en forma de librerias disponibles para los programadores. Esta situacién est ‘cambiando, pero hay que observar que hasta hace poco era complicado hacer grandes programas con Javascript, pues el lenguaje servia para bien poco. Con la llegada de HTMLS y las diversas API se ha extendido mucho y se ha hecho mucho mas poderoso, pero todavia faltaba mucho terreno para que Javascript se considerase un lenguaje robuste, capaz de cumplir las necesidades de aplicaciones grandes. 10 trabajo 1.1.5.- Angular JS y otros frameworks Recientemente han aparecido una oleada de sistemas que han situado Javascript en otro nivel. AngularJ$ es uno de ellos, pero estan otros muchos como BackboneJS © Ember}S. Son los frameworks que vienen a aportar herramientas y patrones de disefio con los que Javascript se convierte en un lenguaje capaz de servir como motor de aplicaciones enormes. Y tiene todo el sentido que sea asi. Hoy los ordenadores modernos, por muy modestos que sean, son capaces de procesar con velocidad ciertas cosas. Son capaces de recibir simples datos y "cocinarso" ellos mismos el HTML para visualizarlos a base de plantillas. Antes el servidor era el que tenia que enviar el HTML completo al cliente, ahora la tendencia es que solo envie los datos y que el cliente (navegador o cualquier otro sistema donde desees ver esos datos) sea ol que los trate y los muestre debidamente. Esto ha producido que una parte de la logica de maquetado y de presentacién de la informacién se haya trasladado del servidor hacia los clientes. La ventaja obvia es que el servidor se ha descargado do trabajo, puosto que simplemente tione quo enviar los datos a través de JSON al clionte y es éste el que se encargara de producir el HTML que sea necesario. Pero no es solo una mejora en relacion al servidor en términos de procesamiento, también en términos de bits, porque es mas ligero transferir datos simples que el HTML completo para mostrarlos. En dofinitiva, ol sorvidor ha repartido la carga de trabajo que solia recaer sobro él entre todos los clientes que se conectan a su servicio. Pero la mejora no se queda solamente en el servidor, sino que el usuario también percibe un mejor desempeno, puesto quo las acciones que realiza contra el servidor tienen una respuesta mas rapida. Con ello poco a poco las aplicaciones cliente/servidor tienen un desempefio mas parecido a las aplicaciones de escritorio, El usuario es el rey y demanda aplicaciones que sean rapidas y no le hagan esperar y eso se lo dan los frameworks como AngularJS. Al programador ademas le facilitan las cosas, no solo por disponer de un conjunto de librerias, sino porque los frameworks nos traen un conjunto de paradigmas y patrones que facilitan el desarrollo del software y sobre todo su mantenimiento. Nos referimos principalmente al llamado MVC, que es la separacién del cédigo an diferentes responsabilidades. Ahora cada parte del cédigo debemos situarlo en un lugar determinado, y ese orden nos facilita que los desarrollos sean mas manejables, Sobre todo esa mejora permite que en un futuro puedas "meter mano” al software para mantanerlo cuando sea necesario. Todo redunda en la calidad del cédigo, lo que es indispensable para los proyectos y los programadores. 1.1.6. Potente, sencillo y extensible Ademas hay un ecosistema de herramientas alrededor de los frameworks y no solo aquellas que estan incorporadas en las librerias del propio AngularJS cualquiera de sus competidores, sino una serie de servicios web y librerias de terceros que nos facilitan una enorme gama de objetivos. Damien http: ww cesarrallowab,com/manuales/menuil-anglarjs-html Manual de AngularJS - D Por poner dos ejemplos tenemos Apache Cordova, que es una libreria para servir de puente a HTMLB5/JS hacia las caracteristicas y funcionalidades de los dispositives méviles. O sistemas como Angular Fite que es un "backend as a service", que permite crear tu propia API y que ellos se ocupen de crear todos los sistemas para la persistencia de la informacion y la entrega de los JSON. 1.1.7.- Angular JS mejora el HTML para crear aplicaciones web AngularJs y otros frameworks tienen ademas la caracteristica de mejorar el HTML existente, facilitando el desarrollo de aplicaciones. En este punto cabe recalear la palabra "aplicaciones" puesto que este tipo de herramientas son adecuadas para realizar las Ilamadas “aplicaciones de gestion’ o “aplicaciones de negocio". Es importante esta mencién porque Angular]S no es adecuado para resolver todo tipo de proyectos, al menos no te facilitara especialmente ciertos desarrollos, Incluso por sus caracteristicas habra necesidades que ni siquiera sea adecuadas realizar on HTMLS, como posiblemente un videojuego con graficos avanzados, donde seria mas adecuado una aplicacion nativa (aunque esto en el futuro pueda cambiar), Otro ejemplo es la realizacién de una aplicacién intensiva de SEO. En cuanto a posicionamiento organico en buscadores el desarrollo con AngulatJS, u otros frameworks Javascript, no es muy interesante porque el HTML que reciben los clientes -o los bots del motor de biisqueda- esta practicamente vacio de contenido y solo se rellena a posteriori por medio de solicitudes Ajax. Parece que Google esta haciendo esfuerzos para que esta situacién cambie y existen diversas soluciones a nivel de programacion que pueden paliar en parte la carencia de SEO, pero lo cierto es que el desarrollo de la aplicacion se complica al aplicarlas. En fin, Angular] nos oftece muchas facilidades para hacer aplicaciones web, aplicacionos de gestion o de negocio, aplicaciones que funcionan en dispositivos y que tienen un rendimiento muy similar a las nativas e incluso aplicaciones de escritorio con un frontal web, cada vez mas habituales 1.1.8.- Por qué Angular JS y no otros frameworks, En este sentido podria haber mucho que discutir entre partidarios do uno y otro framework, pero si dejamos a un lado las preferencias personales de cada uno, por aquella tecnologia en la que haya apostado en el pasado, AngularJS es objetivamente mejor en muchos sentidos Primero y mas importante es que con AngularJS requieres escribir menos eddigo que con otros frameworks. Por ejemplo con respecte a BackboneJS hay muchas mejoras que son realmente criticas como el "doble bindign’ que te permite que los distintos componentes de tu aplicacion estén al tanto de los cambios para modificar su estado automaticamente, sin necesidad de suscribirse a eventos y realizar otro tipo de acciones por medio de lineas de cédigo. En este sentido hay tests objetivos que nos permiten ver que la misma aplicacién hecha con AngularJS tiene sensiblemente menos cédigo que en BackboneJS y quiz4s con otros frameworks pase lo mismo. Segundo la comunidad. Angulars tiene el apoyo de Google y una gran comunidad detras. Las bisquedas de AngularJS se han disparado mientras que las de otros frameworks no han mejorade 0 han caido. Esto quiere decir en definitiva que encontraras mas documentacion y mas componentes do otros desarrolladores para basar tu trabajo en elles. Hasta aqui el primer articulo de AngularJS, que ha sido un tanto general. Solo esperamos que te hayas quedado con ganas de mas. En el siguiente post te explicaremos qué es AngularJs. A continuacién encuentras la charla que ha servido de base para escribir este articulo, de Alberto Basalo. Muy entretenida e interesante, capaz de abrienos la mente y motivarnos a aprender Angular]s. === ea Manual de AngularJs - DesarrolloWeb.com 6170 1.2.- Qué es AngularJS Descripcién general sobre AngularJS, el framework Javascript, asi como les principales componentes que tiene y les conceptos que debemoz conocer antes de poner manos en el eddigo. AngularJS es Javascript, Es un proyecto de cédigo abierto, realizado en Javascript que contiene un conjunto de librerias utiles para el desarrollo de aplicaciones web y propone una serie de patrones de disefio para llevarlas a cabo. En pocas palabras, es lo que se conoce como un framework para el desarrollo, en esta caso sobre el lenguaje Javascript con programacién del lado del cliente. Puedes encontrar el proyecto de AngularJS en su propio sitio web: AngularJS, Superheroic javaScript MVW Framework. Al ser un proyecto de cédigo abierto cualquier persona con un poco de curiosidad echar un vistazo con profundidad y ver como se ha escrita, incluso admiten colaboraciones de desarrolladores que quiera aportar cosas. ‘Nota: Este articula es una transcripcién dela exposicién de Alberto Basalo en Desarroloweb.com / EscuelatT” {que se emlU6 en abierto por webinar: Al pie del tato encontrar un video de esta charla. Hi bloque anterior de festa ponencia le hemes publicado ys en el artculo "Por au angulanis". 1.2.4.+ Mejoras del HTML Este Javascript pretende que los programadores mejoren el HTML que hacen. Que puedan producir un HTML que, de manera declarativa, genere aplicaciones que sean faciles de entender incluso para alguien que no tiene conocimientos profundos de informatica. El objetivo es producir un HTML altamente semantico, es decir, que cuando lo leas entiendas de manera clara qué es lo que hace o para qué sirve cada cosa. Légicamente, AngularJS viene cargado con todas las herramientas que los creadores oftecen para que los desarrolladores sean capaces de crear ese HTML enriquecido. La palabra clave que permite ese HTML declarative en Angular]S es 'directiva’, que no es otra cosa que codigo Javascript que mejora el HTML. Puedes usar el que viene con AngularJS y el que han hecho terceros desarrolladores, puesto que muchas personas estan contribuyendo con pequefios proyectos “independientes del propio framework- para enriquecer el panorama de directivas disponibles. Hasta este punto seras un ‘consumidor de directivas", y finalmente cuando vayas tomando experiencia serés capaz de convertirte en un "productor de directivas", enriqueciendo tit mismo las herramientas para mejorar tu propio HTML, 1.2.2. Promueve patrones de diserio adecuados para aplicaciones web Angular promueve y usa patrones de disefo de software. En concreto implementa lo que se llama MVG, aunque en una variante muy extendida en el mundo de Javascript que luego comentaremos con mas detalle. Basicamente estos patrones nos marcan la saparacién del cédigo de los programas dependiendo de su responsabilidad. Eso permite repartir la légica de la aplicacion por capas, lo que Darin http: ww cesarralawab com/manuales/manul-sngarjs.heml DesarrolloWeb.com 7170 resulta muy adecuado para aplicaciones de negocio y para las aplicaciones SPA (Single Page Aplication). Nota: Las SPA plicaciones de una sole pigina", son sitios web donde los usuarios perciben una experiencia similar la que se tiene con las aplicacions de escritorio, En este tip de sitios la pégina no se recarga. no existe ‘una navegacidn de una pgina a otra totalmente diferente, sine que se van intercambiando las “vistas “Téenicamente podriamos decir que. al interactuar con el sitio, el navegador no recargs todo el contenido sino ‘inicamente vistas dentro dela misma pagina, 1.2.3. Angular JS a vista de pajaro Ahora vamos a hacer un breve recorrido para nombrar y describir con unos pequefios apuntes aquellos elementos y conceptos que te vas a encontrar dentro de Angular]. Primeramente tenemos que hablar sobre ol gran patrén que se usa en Angular, ol conocido Modelo, Vista, Controlador. + Vistas: Serd el HTML y todo lo que represente datos o informacién. + Controladores: Se encargaran de la légica de la aplicacién y sobre todo de las llamadas Factorias’ y 'Servicios’ para mover datos contra servidores 0 memoria local en HTMLS. + Modelo de la vista: En Angular el "Modelo" es algo mas de aquello que se entiende habitualmente cuando te hablan del MVC tradicional, osea, las vistas son algo mas que el modelo de datos. En modo de ejemplo, en aplicaciones de negocio donde tienes que manejar la contabilidad do una empresa, ol modelo sorian los movimientos contables. Poro en una pantalla concreta de tu aplicacién es posible que tengas que ver otras cosas, ademas del movimiento contable, como el nombre de los usuarios, los permisos que tienen, si pueden ver los datos, editarlos, etc. Toda esa informacién, quo es util para el programador pero que no forma parte del modelo del negocio, es a lo que llamamos el "Scope" que es el modelo en Angular. ‘Nota: Por ese motive por el cual an AngularS tienes unos madelos un poco diferentes, algunos autoresdicen que el patrdn que utiliza el framework es el MVVM Model View View Model. En resumen, el modelo de la vista son Jos datos mis los datos adicionales que necesitas para mostrarios adecuadamente. Ademas del patron principal, descrito hasta ahora tenemos los médulos: ‘Médulos: La manera que nos va a proponer AngularJS para que nosotros como desarrolladores seamos cada vez mas ordenados, que no tengamos excusas para no hacer un buen cédigo, para evilar el cédigo espaguetti, ficheros gigantescos con miles de lineas de cédigo, etc. Podemos dividir las cosas, evitar el infierno de las variables globales en Javascript, etc. Con los modulos podemos realizar aplicaciones bien hechas, do las quo un programador pucda sontirse orgulloso y sobre todo, que nos facilite su desarrollo y el mantenimiento. === ea Manual de AngularJS - DesarrolloWeb.com 3170 AVISTA DE PAJARO = VISTAS * TROZOS DE HTML, & © DIRECTIVAS * FILTROS * mODULOS * CONTROLADORES * App * FACTORASDEADDESOA seo * SERVICIOS DE LOGICADE * DEPENDENCIAS NEGOCIO = MODELO DE LA VISTA * SScoPE 1.2.4.- Dos “mundos" en Angular JS Ahora tenemos que examinar AngularJS bajo otra perspectiva, que nos facilite entender algunos conceptos y practicas habituales en el desarrollo. Para ello dividimos el panorama del framework en. dos areas. + Parte del HTML: Es la parte declarativa, con las vistas, asi como las directivas y filtros que hos provee AngularJs, asi como los que hagamos nosotros mismos 0 terceros desarrolladores, + Parte Javascript puro: Que seran los controladores, factorias y servicios. DESCRIPCION GENERAL HTML $scope JS Es importante sefialar aqui, aunque se volver a incidir sobre ese punto, que nunca jams se debera acceder al DOM dasde la parte del Javascript. Es un pacado mortal ya que esa parte debe ser programada de manera agnéstica, sin tener en cuenta la manera en la que se van a presentar los datos. En medio tendremos el denominado Scope, que como decimos representa al modelo en Angular. En resumen no es mas que un objeto Javascript el cual puedes extender creando propiedades que pueden ser datos o funciones. Nos sirve para comunicar desde la parte del HTML a la parte del Javascript y viceversa. Es donde se produce la "magia" en Angular y aunque esto no sea del todo cierto, a modo de explicacién para que se entienda algo mejor, podemos decir que AngularJs se va a suscribir a los cambios que ocurran en el scope para actualizar la vista. Y al reves, se suscribira a los cambios que ocurran en la vista y con eso actualizara el scope. En el siguiente articulo comenzaremos ya con cédigo, asi que los impacientes tendrén ya sus daseos hechos realidad. Puadas ver el video de esta parte de la presentacién sobre Qué es Angular]. =a ea Manual de AngularJS - DesarrolloWeb.com 9170 1.3.- AngularJS Vs jQuery chi>Hola
En AngularJs ya vimos el cédigo necesario en un articulo anterior, pero lo reproducimos para poder ‘compararlos facilmente. en” ng-app> UTE-8"> === ea DesarrolloWeb.com
=== ea Manual de AngularJs - DesarrolloWeb.com 44170 Observa que al iniciarse por primera vez la pagina los valores del modelo (definidos en los checkboxes con ng-model) no estan inicializados. Por ello las expresiones donde se vuelcan estos datos no muestran valor alguno. Luego, cuando cambias el estade de los checkboxes ya se empieza aver el estado de los elementos. Esta situacion podria cambiar solo con inicializar esas propiedades en el controlador. Lo hemos colocado en el cédigo comentado para que se vea bien. El otro detalle que igual no salta a la vista es la llamada a la funcién del modelo vm.avisar, colocada en el ng-change del primer checkbox, que no se llama cuando so cambia el estado del ‘campo como consecuencia del Javascript. Demostrar eso es el motivo de la existencia del botén, Hay infinidad de practicas con checkboxes. Con lo que has visto aqui seguramente sepas desempeiar cualquier situacién, 4.3.- Filtrar, ordenar y otras variables embutidas en la directiva ngRepeat Usos més detallados de la directiva ngRepeat para filtrar, ordenar los elementos y acceder a variables embutidas que nos dan informacion sobre las repeticiones. La directiva ngRepeat de AngularJS es una de esas cosas que llaman la atencién, por la sencillez y rapidez con la que se puede implementar un bucle que nos repite una plantilla HTML, pero sobre todo por su potencia, La directiva ya la hemos usado en diversos ejemplos antariormente, incluso tenemos un articulo i is a i para empezar a usarla. Ahora queremos profundizar un poco mas en otros usos que resultaran muy ttiles para cual aplicacién web. tipo de En la documentacién de la directiva ngRepeat encuentras muchos datos iitiles, aqui te vamos a resumir algunos y vamos a realizar un ejemplo que lo ponga todo en practica, 4.3.1.- Sintaxis ngRepeat Nos tenemos que familiarizar primero con la sintaxis usada para especificar el comportamiento del buele en ngRepeat. Aunque ya lo hemos visto en cantidad de ejemplos, comencemos por repasar la sintaxis basica. ‘elem in elementos"> En la directiva indicamos el recorrido a una coleccién y la variable donde vamos a tener el Darin http: ww cesarrallowab,com/manuales/menuil-anglarjs-html Manual de AngularJS - Desarrol elemento actual: “elem in elementos. En este caso "elementos" es la coleccién que vamos a recorrer en el bucle y “elem” es la variable donde vamos a tener el elemento actual en cada repeticién, Pero eso no es lo unico que se puede marcar en esta directiva, también podremos especificar otras cosas, colocando el caracter "|" (tuberia / pipe) como separador. ng-repeat="elem in elementos | filtros | ordenacion" Técnicamente podemos decir que dentro del HTML de tu repeticién tendras un scope local, donde encontraras ol elemento actual sobre el que estas iterando, asi como otras variables ttiles quo: veremos también, como gindex que nos devuelve el indice actual en el recorrido, 4.3.2.- Filtrado en ngRepeat El filtrado nos sirve para hacer una biisqueda dentro de los elementos de la coleccién que tenemos en un array 0 en un objeto en nuestro modelo. "Nota: Por supucst, la colceciénesté della del cliente completa yle que hace el fter es simplemente defnie cles elementos de esa coleccién desean visualizarse en le repetiién. Osea, es un fitrado de datos de los que ya cisponems, no un buscador que pueda buscar entre miles de elementos y solo recibir unos pocos en e cliente ‘Sueno ests fitrando ya tenes esos elementos en la memoria de Javascript en un array u objeto So indica con la palabra filter. soguida por sirve para filtrar. ng-repeat="cerveza in vm.cervezas | filter: 'pale’ " yla cadena o variable donde esta la cadena que nos Esto nos mostrara solo aquellas cervezas que tienen la palabra "pale" escrita por algin lado. Por supuesto, en lugar de un literal de cadena para el filtrado, puedes usar una variable de tu modelo. hg-repeat="cerveza in vm.cervezas | filter: vm.filtrocliente” Ahora utilizars 61 contenido de la variable vm.filtroCliente para mostrar aquellos elementos que corresponda. 4.3.3.- Orden de los elementos en la repeticién Ahora veamos como exprosar el orden de visualizacién de los elementos on la repeticién. Para ello usamos la palabra “ordenBy', seguido de ':" y el campo sobre el que se debe ordenar. Opcionalmenta colocamos después si el orden es ascendente o descendenta, ng-repeat="cerveza in vm.cervezas | orderBy: ‘name’: true" En este caso ordenamos los elementos por el campo “name”. Logicamente debe de ser un atributo del objeto que estas recorriendo en la coleccién. Luego opcionalmente colocamos un boleano para indiear el orden. De manera predeterminada el orden es ascendente, Si el boleano es true, entonces el orden se hace descendente y si es also, ontonces es ascendente. Nuovamente, ol orden se indicara habitualmente a partir de variables de Javascript o del modelo de nuestra vista. En un codigo que podria ser como este: ng-repeat="cerveza in vm.cervezas | orderB) /m. campo: vm. orden’ 4.3.4.- Variables de la repeticion en el scope local Como hemos dicho existe un scope local que nos expone el elemento actual de nuestra repeticién. Poro ademas tenemos una serie de variables que Angular]S nos ofrece de manera adicional. Son === ea Manual de AngularJS - Desarrol variables que resultaran muy iitiles para tus necesidades habituales en recorridos Por ejemplo en el scope actual tenemos la variable $index, que nos indica el indice actual en la iteracion. Fl primer indice recuerda que es cero, el segundo sera uno, etc. Para mostrar ese indice hacemos como con cualquier otro dato que exista en el scope, meterlo dentro de una expresion encerrada con dobles llaves. El elemento actual es {{ $index }} y su valor es {{ elem }} <> Junto con el $index, este es ol conjunto de variables inyectadas autométicamente on el scope local: $index, numércico. Es el indice de la iteracién. Sfirst, boleano, tendra el valor true para el primer elemento de la iteracién, $middle, boleano, sera true en los elementos que no sean primero o ultimo. Slast, boleano, solo sera true en el ultimo elemento. Seven, boleano, sera truo on caso quo ose elemento sea impar on la lista de repeticion. $odd, boleano, ser true en caso que el elemento sea de indice par. 4.3.5.- Ejercicio de repeticién con ng-repeat con filtrado, orden y variables de scope local Ahora vamos a ver el cédigo de un ejercicio que nos facilite practicar con estos sistemas para personalizar la repeticion de un template en Angular]S. El ejemplo es parecido al ejercicio anterior donde conocimos JSONP en Angular], solo que ahora aplicamos las posibilidades de ngRepeat vistas on este articulo. Para ello hemos incorporado un par de controles especiales, que nos permiten: + seri jr un texto para realizar el filtrado + Seleccionar el campo sobre el que queremes la ordenacion y si ésta debe ser ascendente (orden alfabético porque se trata de campos que tienen cadenas) o descendente, Pruebo Ajax con JSONP

Busca corveza:

<1i ng-repeat="cerveza in vm.cervezas | filter:vm.filtrocliente | orderBy: vm,campo: vm. orden" ng-class="{even: $even, odd: $odd}"> {{Sindex +1}}.- {{oerveza,name}}, {{ cerveza.description }} === ea Manual de AngularJS - Desarrol
Para el texto del filtrado usamos el INPUT type text que hemos mareade con ng- model="vn filtroClients Para el orden tenemos dos tipos de controles, diferentes para poder practicar con mas cosas. ‘Tenemos un par de botones que nos permiten marcar orden alfabstico 0 contrario, que tienen sus correspondientes ng-click para definit comportamientos. Por otra parte tenemos un par de campos INPUT de radio para definir si queremos que se ordene por el nombre de la cerveza 0 su campo descripcion. Pero sobre todo te tienes que fijar en el listado de cervezas que realizamos con una lista UL y sus correspondientes LI. Echa un vistazo a la directiva y al template que engloba:
  • {{Sindex +1}}.- {{cerveza.name}}, {{ cerveza.description }}
  • Aqui tenemos varios elementos que destacar: + La repeticién se hace con la coleccién que tenemos en vm.cervezas (que se puebla con una Hamada Ajax con JSONP + Dentro de nuestro template, el LI y todo su contenido, tendremos disponible la cerveza actual en una variable llamada “cerveza’ del scope actual, + Para el filtrado usamos el contenido del campe de texto con ng-model="vm.filtroCliente! + Para el orden usamos tanto el valor vm.campo como el vm.orden que se sacan de los botones y los radiobuttons + Ademas puedes ver otra directiva nueva hasta este momento en el Manual de AngularJS que es ng-class, Nos sirve para indicarle la class de CSS que queremos aplicar a un elemento HTML. En este caso usamos los valores Seven y $odd del scope local (datos creados automaticamente por Angular) para colocarlo la clase adecuada. De esta manera conseguimos el tipico estilo de filas coloreadas como una cebra. + Por diltimo puedes reparar dentro del contenido de los LI que estamos usando el index, que es otra variable del scope local, que nos viene de fabula para numerar las filas de los elementos de la lista. El Javascript tendra una pinta como la siguiente: angular ‘module(*apiapp', [}) controdier( ‘apiAppctr1', controladorPrincipal); function controladorPrincipal($scope, shttp){ var varthis; vm. orden vm. campo false; "name"; var url = "netp: if (vm. nombre) { url = "aquer ‘/api..openbeer database, com/v1/beers. json?cal lback=3SON_CALLBACK" ; + vm.nombre vm. buscacervezas = function(){ Shr tp. jsonp( url). suecess(Tunct1on( respuesta) { console.log("res:", respuesta); vm.cervezas = respuesta. beers; === ea Manual de AngularJS - DesarrolloWeb.com 48170 Di 3 Realmente en este Javascript hay poco que necesites aprender, que no hayas visto ya en articulos anteriores. Te podré interesar la inicializacién de datos en el scope qe encuentras én las primeras lineas de la funcién del controlador, Aunque para la materia que nos trata no importa demasiado, si que necesitarés unos estilos CSS para formatear un poco la presentacion de ese HTML, de manera que quede bonito y puedas apreciar algunas cosas como los colores de fondo de tipo cebra para los elementos de la lista. body{ font-family: sans-serif; } dit font-size: 0.8em; margin-bottom: 10px; padding: 19px; 11. spang font-weight: bold; display: block; font-size: 1.2em; } asidet width: 200px; float: Tight; padding: 20px; display: table-cell; } aside h2¢ margin-bottom: 3px; 3 Section( display: table-cell; Li.event background-color: #d5d505; } Li.odag background-color: #d5d5tf; 3 Eso es todo de momento, espero que puedas aprovechar ya mismo algunas de estas potentes caracteristicas de ngRepeat. Como habras encontrado, esta directiva permite hacer cosas impactantes sin escribir nada de cédigo, algo que apreciaras sobre todo si tienes algo de experiencia en Javascript o librerias como jQuery. Paro OJO, esa misma potencia puede que resulte perjudicial para tu aplicacién si se usa sin control, nunca intentes usar ng-repeat con conjuntos masivos de datos, a lo sumo con elementos de 100 en 100, aplicando técnicas come la paginacién para reducit los elementos en la vista. === ea Parte 5: Ajax en Angular Introduccién a los mecanismos para realizar conexiones con el servidor asincronas por HTTP con AngularJS. Lo que cominmente conocemos por Ajax, con ejemplos que nos facilitaran entender una de las facetas mas potentes de este frameweork Javascript y el desarrollo frontend basado en las cada vez mas populares API REST. 5.1.- Ajax con AngularJS para acceso a API ‘Ala vez que aprendemos técnicas de Ajax vamos a repasar diversas de las practicas que ya te hemos ido contando a lo largo del Manual de Angular]s. Ya lo sabes, Ajax es una solicitud HTTP realizada de manera asincrona con Javascript, para obtener datos de un servidor y mostrarlos en el clienta sin tener que recargar la pagina entera. Ademas para los despistados que no lo sepan todavia, tenemos un articulo que te explica muy bien qué son. exactamente las API REST. Vwi 5.1.1. Service Shttp El servicio $http (service en inglés, tal como se conoce en AngularJS) es una funcionalidad que forma parte del nucleo de Angular. Sirve para realizar comunicaciones con servidores, por medio de HITE a través de Ajax y via el objeto XMLHttpRequest nativo de Javascript o via JSONP Después de esa denominacién formal, que encontramos en la documentacion de AngularJs, te debes de quedar por ahora en que nos sirve para realizar solicitudes y para ello el servicio $http tiene varios tipos de acciones posibles. Todos los puedes invocar a través de los parametros de la funcién shttp y ademas existen varios métodos alternativos (atajos 0 shortcuts) que sirven para hacer cosas mas especificas. Entre los shortcuts encuenteas: shttp.get) a. Manual de AngularJS - Desarrol shttp post shttp-put) shttp-delete() shttp,sonp0) shttp-head shttp patch) ‘Tanto ol propio $http0 como las funcionos do atajos te dovuclven un objeto quo con ol “patron promise” te permite definir una serie de funciones a ejecutar cuando ocurran cosas, por ejemplo, que la solicitud HTTP se haya resuelto con éxito o con fracaso, ‘Nota: Si vienes de jQuery ya habris podido experimentar las promesas “promise” en las lamadas a la funcién. ‘.ajnc S.get Spost, ete. En Angular funciona de manera my similar El service $http es bastante complejo y tiene muchas cosas para aportar soluciones a las mas variadas necesidades de solicitudes HTTP asincronas. De momento nos vamos a centrar en lo mas basico que ser suficiente para realizar un ejemplo interesante. 5.1.2.- Inyeccién de dependencias con Shttp Si vas a querer usar el servicio $http lo primero que necesitards sera inyectarlo a tu controlador, 0 a donde quiera que lo necesites usar. Esto es parecido a lo que mostramos cuando estabamos practicando con controladores e inyectébamos el $scope, angular module(*apiapp', []) scontroller('apiAppctrl', ['$http', controladorPrincipal] ); Como puedes ver, on la funcién de nuestro controlador. llamada controladorPrincipal, lo estamos indicando que recibira un pardmetro donde tiene que inyectar el service $http. Al declarar la funcién recibiras esa dependencia como parametro. function cont roladorPrincipal(shttp){ Ahora, dentro del codigo de ese controlador podras acceder al servicio Shttp para realizar tus Hamadas a Ajax. 5.1.3. Realizar una llamada a Shttp.get() El método get() sirve para hacer una solicitud tipo GET. Recibe diversos parametros, uno obligatirio, que es la URL y otro opcional, que es la configuracion de tu solicitud. Shttp.get("http: //u. example. com") Lo interesante es lo que nos devuelve este método, que es un objeto "HtpPromise", sobre el cual podemos operar para especificar el comportamiento de nuestra aplicacién ante diversas situaciones. 5.1.4.- Respuesta en caso de éxito Do momento, veamos qué deberiamos hacer para especificarle a Angular lo que deve de hacer cuando se reciba respuesta correcta del servidor. shttp.get(url) success (function( respuesta) { Z/e6digo en caso de éxito yi Como puedes ver en este cédigo es que $http nos devuelve un objeto. Sobre ese objeto invocamos === ea Manual de AngularJS - DesarrolloWeb.com 51/70 e] método success que sirve para indicarle la funcién que tenemos que ejecutar en caso de éxito en la solicitud Ajax. Esa funcién a su vez recibe un parametro que es la respuesta que nos ha devuelto el servidor. 5.1.5.- Ejemplo completo de solicitud Ajax con $http ‘Vistos estos nuevos conocimiontos sobre ol 'sorvice" $http estamos en condiciones de hacer un poco de Ajax para conectarnos con un API REST que nos ofrezca unos datos. Esos datos son los que utilizaremos en nuestra pequesa aplicacién para mostrar informacién. ‘Nota: Vamos a usar un API lismada REST Countries, que puedes encontrar en hiipijresteountres.c [Este API nos devuelve JSON con datas sobre los paises del mundo. En principio puedes hacer diversas ‘operaciones con los comandes sobre el AP, pero varmos aver solamente unas pocas que nos permiten recibir los ‘datos de Les palses agrupades por regiones. ‘Las URL que usaremos para conectarnos al AP son como estas: tp restcountries.ewresyv /reqion/atica hntp.estoountries.ewrestysregionveurone "Puedes abririas en tu navegador y observer cémo la respuesta es un conjunto de datos en notacién JSON. Aunque sencilla, esta aplicacién ya contene varias cosillas que para una mejor comprension conviene ver por separado. Este es nuestro HTML:
    Selecciona:

      “<1 ng-repeat= {{pais. capital}}
    valu pals In vm.paises">Pats: {{pals.name)}, capital:
    En el siguiente articulo explicaremos cémo acceder por Ajax a un JSON pero con JSONP. 5.2.- JSONP en AngularJS mediante JSOMP, realizad: JSONP es un mecanismo muy iitil cuando estamos trabajando con Ajax en Javascript y queremos traernos datos que residen en otro servidor, Existe una problematica por la cual no puedes cargar datos con Javascript que te vengan desde servidores de otros dominios, pues puede darte un error da seguridad si es que el sarvidor al que te conectas no esta configurado para aceptar solicitudes === ea Manual de AngularJS - DesarrolloWeb.com 54/70 “cross domain’ Ahora no buscamos tanto introducir esta variante de JSON, pues ya la vimos con detalle en el articule dadicado a JSONP. Simplemente te queremos explicar cémo debes usar JSONP dentro de AngularJS de una manera muy sencilla. Es un excelente ejercicio para practicar con tado lo que levamos visto en el Manual de Angular)S 5.2.1. Conexiones HTTP asincronas en Angular JS Para realizar solicitudes al servidor asincronas (lo que se conoce habitualmente por Ajax en el mundo del desarrollo web) con Angular}S necesitamos un servicio llamado $http. Este ‘servico" nos lo ofrece Angular de manera completa en su "core" y esta preparado para hacer tado tipo de conexiones. Existen varios 'shortcuts" que sitven para hacer operaciones tipicas, con es el caso de traernos datos ofracides por madio de JSONP. asi como GET, POST, ete. En concreto para nuestro ejemplo usaremos el método jsonp() de shttp, que recibe la URL del recurso JSONP al que quieres acceder. Al invocar ese método recibimos un objeto de respuesta sobre el que podemos configurar comportamientos para el caso de que la solicitud tenga éxito, fracaso, etc. Esto se hace con el conocido patrén promise de Javascript Nota: En el articulo dedicado « Ajex en AugularS expicamos més detalles de este “service” ofrecido por Angular, 5.2.2.- Funcién callback del JSONP en la URL de conexién La verdad es que Angular hace todo el trabajo "sucio" por debajo y ti lo tinico que necesitas hacer es invocar e] metodo correcto del service $http. Asi que el metodo de acceso es practicamente el mismo que si estuvieras trayendo los datos con un JSON normal. En este caso la diferencia es que le tienes que indicar un nombre de la funcién callback de tu JSONP. La restauracién del dato se hace de manera automatica por AngularJS, lo unico que necesitas es que en la URL compuesta de tu JSONP indiques el nombre de la funcién callback como “JSON CALLBACK". Eso en JSONP se indica'con el parémetro en la URL de conexién llamado callback’, que escribes de la siguiente manera. Nota: Esa funcién callback es Ia que uesmos en Javascript dal navagador para restaurar los datos dal JSONE ‘Como decimos és algo que realmente no necesltas preocuparte mucho, pues és transparent pare tl. SI quieres ‘obtener mis informacién podrias consultar l articulo sobre JSONP. ‘hitp//example.com/url,json?callback=JSON CALLBACK Darin http: ww cesarrallowab,com/manuales/menuil-anglarjs-html Manual de AngularJS - Desarrol 5.2.3.- Ejemplo realizado en Angular JS para traer datos de API REST con JSONP Ahora vamos a realizar un ejemplo en AngularJS para practicar lo aprendido. De este modo verés que es todo muy sencillo. En este ejemplo traemos datos de cervezas de un API REST pablica llamada “Open Beer Database’. Los datos los obtenemos por JSONP y puedes ver un ejemplo de conexion y codigo en esta pagina de la documentacion del API. http://openbeerdatabaso.com/documentation/examples-jsonp En nuestro caso concreto accedemos a cervezas en vez de corvecerias, pero el ejomplo es bien similar. Nuestra URL para obtener datos del API es como esta http //api openbeerdatabase.com/v L/beers,ison2callback=|SON CALLBACKS quer; Como puedes ver, en la URL indicamos en el parametro "callback" el nombre de la funcién callback que nos pide Angular. Ademas hay un segundo parametro llamado “query” con el que podemos expresar unas palabras clave para hacer biisquedas de cervezas que contengan esas palabras. Sabiendo esto, ahora pasomos a ver nuestro cédigo. Esta es la parte del HTML.
    shi>Prucbo Ajax con JSONP

    • {{cerveza. name}}, {{ cerveza.description }}
    Como ves, tenemos un campo de texto donde podemos escribir un dato y un botén de buscar. Al darle a buscar llamamos a un método de nuestro "scope" para traernos las cervezas que tengan el texto escrito en el campo de texto, ya sea en su nombre o descripcién, Luego tenemos un bucle definido con ng-repeat en el que recorremos una coleccién de cervezas. Ahora puedes ver la parte del Javascript: angular module('apiapp', 1) ‘controller( ‘apiAppCtr', controladorPrincipal); function controladorPrincipal($scope, shttp){ var viethis; vm. buscacervezas = function(){ var url = "http: //api. openbeerdatabase. com/vi/beers. json? calllback=JSON_CALLBACK" 4f (vm. nonbre){ url += "aquery=" + vm, nombre; z ‘Shttp. jsonp(ur1) . success( function respuesta) { console. log("res:", respuesta); vm.cervezas = respuesta. beers; yi } Bien, supongo que estos cédigos ya te iran sonando y en concreto este ejercicio es muy parecide al anterior en el que conocimos Ajax. En la parte importante, nuestro controlador, apreciaras que tenemos un método llamado buscaCervezas() que es el que se encarga de hacer todo el trabajo. En ese método primero construimos la URL para acceder al API, agregandole el nombre de la === ea Manual de AngularJS - DesarrolloWeb.com 56 / 70 cerveza que quieres buscar. Luego accedemos por medio de $http.jsonp() a la URL construida y definimos una funcién que se ejecutaré en caso de éxito de la conexién Ajax (success). en esa funcién simplemente volcamos las cervezas encontradas en el scope, con lo que se actualiza automaticamente la vista en el bloque donde teniamos la directiva ng-repeat de nuestro HTML, Con esto es todo, Solo te queda practicar lo aprendido por tu cuenta para no dejarte un detalle sobre las conexiones JSONP en Angular}s. 5.3.- Operacién post HTTP con $http en AngularJS lor por medio del HTTP con la libre Hemos visto como realizar operaciones basicas de Ajax con AngularJS, en las que recibimos informacion del servidor. por medio de got. Ahora veamos también como se enviarian datos all servidor por medio de Ia operacién poet del HTTP. Como siempre Iae cores con Angular[S se hacen muy sencillas. El servicio ("servico" en la torminologia de Angular) shttp nos ofrece una serie de métodos shortcut” enfocados en realizar las operaciones tipicas implementadas dentro del protocolo HTTP. Para enviar datos post disponemos de shttp.post(). En ese método podemos enviar como parametro, aparte de la URL del servidor donde haremos el post, un objeto con los datos que se desean enviar Shttp.post("recibe. php", (uno: 1, fruta: "manzana")); Como ves, la primera direccién es la URL relativa donde enviar los datos (también podria sor absoluta) y el segundo parémetro son los datos que queremos envier al destino, Este método devuelve como resultado un objeto sobre el que pocemos implementar con el patron promesa algunas operaciones en diversas situaciones con respecto a esa conexion con el servidor, algo que ya viste en lo ejemplos de Ajax anteriores. Lo que vamos a aprender de momento es realizar acciones en caso de éxito y para ello tenemos que indicarlas con una funcién en "success" var conAjax = $http.post("recibe. php", {uno: 1, fruta: "manzana"}); conajax. success(function(respuesta){ console. log(respuesta); yi En la funci6n que asociamos al caso success, como ya habrés visto muchas veces, recibimos un paramatro con la respuesta que nos devuelve el servidor. En este caso simplemente la volcamos a la consola de Javascript. Damien http: ww cesarrallowab,com/manuales/menuil-anglarjs-html DesarrolloWeb.com 57/70 ‘Nota: #ste cédigo lo encontrarés habitualmente encadenando lamadas, sin necesidad de declarar la variable "conAjex’. Luego haremos ejemplos que usen esa comtin forme de codificar. 5.3.1.- Recibir los datos en el servidor Los datos que ests enviando por post Angular los empaqueta como JSON y te Ilegaran al sorvidor, aunque no por el método comin POST, en pares clave/valor como quizas estas acostumbrado. En realidad nos lo envia como content-type, ‘application/json" en un Ginico objeto, lo que es atil porque nos acepta datos mas complejos, con anidacién de ohjetos JSON. [Nota: Fara que nos entendamos. en un lenguaje como FHP. cuando enviarnos datos por post los recages con él array POST. Ese array no aceplara dversos niveles de anidacién para recibir datos complejos, osea, podemos ‘tener claves con valores situps. Pero se nos queda un poco corto para aplicaciones modernas. En PHP si accede post encontraris que et array est vaca, Este asunto de los niveles de anidacién en los datos que se envian con JSON se ve por ejemplo en este cédigo, perfectamente valido y habitual, Shttp.post("recibe2. php", { hombre: "Miguel", Fechavacimiento: "21/02/1975", sitiosPreferidos: [ "Desarrolloveb. com', "Guiarte.com" 1, direccion calle: "ve la alegria", nunero: 18, ciudad: "Villadigital” ? » success( function( respuesta) { ‘console. log (respuesta) ; vi Ese objeto complejo JSON lo recibirds on el servidor tal cual. El eédigo para recogerlo dependera de tu lenguaje de servidor. Por ejemplo en PHP lo haria de esta manera: File_get_contents("php://input") Eso nos devolveria una cadena de texto, que si quieres volcar a un objeto native de PHP usaras la funcién json_decode(). Tu codigo podria quedarte parecido a este: Sobjbatos = json decode(file_get_contents("php://input")); A partir de ese momento encontraras que puedes acceder a los datos del JSON recibido como estés acostumbrado en el trabajo con objetos PHP. echo $objDatos->nombre; echo $objDatos-~sitiosPreferidos[0] ; echo $objDatos->direccion->calle; 5.3.2.- Enviar un formulario por POST Silo que quieres es enviar los datos que se encuentran en un formulario por POST al servidor, para recibirlos en un JSON, la verdad es que el procedimiento es bien parecido a lo que has visto. === ea Manual de AngularJS - DesarrolloWeb.com Simplemente tendremos que crear nuestro modelo con los datos del formulario, algo que hace Angular por ti agregande la directiva ngModel, y enviarlo por shttp.post0) Echa un vistazo a este formulario:
    text" ng-mode! ‘vm. fdatos. nombre"> Nombre: Edad: 'vm. fdatos.edad"> text" ng-model submit" value="Enviar">
    Observa que en ng-model hemos volcado los campos del formulario dentro de un objeto llamado *fdatos". Osea, en el modelo de la vista 'vm'" tenemos un objeto "datosf” y dentro ya encontraremos los datos de nuestro formularie. ‘También repara en la directiva ngSubmit que hemos colocado en la etiqueta FORM. Vers que la hemes asociado con una funcién de nuestro modelo: vm.enviar(). En esa funcion que veremos a continuacién es donde debes escribir el codigo para poder enviar el formulario. "Nota: Esto no ests ebigado a hacerlo asi necesariamente, porque puedes crear la estructura que desees en el ‘modelo, Simplemente nos resultaré més cémodo colocar directamente les datos vinculados a un obleto de datos lol formularia, Al servidar por post no vamos a enviar todo el modelo de la vista, sino tinicamente los datos dl {formulario. Comp esta estructura ya nos permite tener los datos del formulario en un objeto independiente, nos ahorrari el tener que hacerlo “a mane’, Enseguida lo vers major Para que esto funcione en tu Javascript debes inicializar "fdatos" como un objeto, aunque sea vacio. Por ello en tu controller deberias incluir esta cédigo. vm. fdatos = (3; Es un cédigo parcial, Iuego lo voras on el contexto del controlador completo. Gbserva que en tu “vm" has inicializado el objeto “felatos" con un literal de objeto vacio, expresado con las dos llaves. Esto ya nos deja en muy buena situacién para enviar ese formulario de una manera muy limpia. Ahora te mostramos el eédigo completo para crear nuestro controlador. angular -module(‘app', [1) ‘controller(‘appctr1', [*shttp', controladorPrincipal]); function controladorPrincipal(snttp){ var vmethis; //Aniclalizo un objeto en los datos de formulario vm. fdatos = (); // declaro 1a funcién enviar vm.enviar = function(){ ‘Shttp. post(""recibe-formulario. php", vm. fdatos) success(runction(res){ ‘console. 1og(res); //por Supuesto podras volcar la respuesta al modelo con algo como vm.res = res; === ea Con esto creo que lo tendras todo claro para poder enviar datos a un servidor por medio de post, datos que podran ser todo lo complejos que necesites en tu aplicacién. Como puedes comprobar la llamada a $http.post() te hace todo el trabajo de la solicitud HTTP por medio de Ajax, por lo que solo tendrés que programar el comportamiento especifico para tus necesidades, tanto en el cliente Parte 6: Vistas y sistema de Routing en Angular En resumen, las vistas nos permiten separar partes de nuestra interfaz en partes distintas y con el sistema de routing AngularJS es capaz de saber qué vistas debe mostrarte atendiendo a la URL que la aplicacién esté mostrando. Veremos en detalle ‘como trabajar con multiples vistas y rutas profundas en una aplicacién desarrollada con este framework Javascript. 6.1.- Médulo ngRoute para crear rutas e intercambiar vistas en AngularJS Hasta ahora en el Manual de Angular]S hemos visto muchas cosas interesantes, sin embargo nos hemos limitado a hacer aplicaciones en las que solo teniamos una ruta y una vista. Sin embargo, cuando so vayan complicando los requisitos de nuestras aplicaciones podremos necesitar ampliar estas posibilidades, Lo que vamos a aprender ahora es a crear rutas distintas dentro de nuestra aplicacién, de modo que tengamos varias URL que muestran vistas distintas. Quizas te preguntes ¢Si Angular]S esta especialmente indicado para hacer aplicaciones de una sola pagina (concepto que se conoce con el nombre de 'Single Page Application’, SPA), por qué ahora nos muestras la posibilidad de crear varias URL? éNo era una tnica pagina lo que queriamos hacer? a. ingularJS - DesarrolloWeb.com 60/70 Pues bien, podemos tener ambas cosas. Una aplicacién de una sola pagina, pero quo es capaz de representar URL distintas, simulando lo que soria una navogacién a través de la aplicacion, pero sin salirnos nunca de la pagina inicial. Esto nos sirve para varias cosas, entre otras: + Memorizar rutas profundas dentro de nuestra aplicacién. Podemos contar con enlaces que nos leven a partes internas (deeplinks), de modo que no estemos obligados a entrar en la aplicacion a través de la pantalla inicial. + Eso facilita también el uso natural del sistema de favoritos (o marcadores) del navegador, asi como el historial. Es decit, gracias a las rutas internas, seremos capaces de guardar en favoritos un estado determinado de la aplicacién. A través del uso del historial del navegador, para ir hacia delante y atrés en las paginas, podremos navegar entre pantallas de la aplicacion con los botones del navegador. + Mantener vistas en archivos independientes, lo que reduce su complejidad y administrar los controladores que van a facilitar el procesamiento dentro de ellas. 6.1.1.- Cémo son las rutas internas de la aplicacién Para que nos entendamos, en nuestra aplicacién vamos a poder tener varias URL. Podriin tener una forma como esta: http://example.com/index php hitp://example.com/index. php# /seccion http //example.com/index php#/pagina interna Son simples ejemplos, lo importante os fijarse en el patrén "#/". Podras darte cuenta que estas URL corresponden con la misma pagina, todas, pues usan el caracter "#" que nos sirve para hacer lo que se Haman "enlaces internos" dentro del mismo documento HTML. Como sabemos, la “almohadilla” ssostenido" o como la lames en tu pais), sirve para hacer rutas a anclas internas, zonas de una pagina. Cuando Ie pidamos al navegador que acceda a una ruta creada con '#" éste no va a recargar la pagina, yéndose a otro documento. Lo que haria es buscar el ancla que corresponda y mover el scroll de la pagina a ese lugar. Nota; #ste es el comportamiento de cuslquler navegedor: no estamos apuntando nada que tenga que ver con Javascript o con Angular. Angular ast como otros frameworks Javascript MVC se aprovechan de esta cceracterfstica para implementar el sistema de enrutado, En el caso de AngularJS no habra un movimiento de scroll, pues con Javascript se detectara el cambio de ruta en la barra de direcciones para intercambiar la vista que se esta mostrando. Por ello, volviendo a la pregunta de antes: "si la posibilidad de crear varias rutas dentro de una Darin http: ww cesarrallowab,com/manuales/menuil-anglarjs-html Manual de AngularJS - D aplicacion contradice el sistema de Single Page Application", observamos que realmente no son piginas distintas, sino que es la misma pagina. Lo que estamos haciendo os "simular Ia navegacin por varias URL cuando realmente os la misma, con enlaces internos. 6.1.2.- Instalar ngRoute El médulo (‘modulo’ en la terminologia anglosajona de Angular) ngRoute es un potente paquete do utilidades para configurar el enrutado y asociar cada ruta a una vista y un controlador, tal como hemes dicho. Sin embargo este médulo no est ineluido en la distribucién de hase de Angular, sino que en caso de pretender usarlo tenemos que instalarlo y luego inyectarlo como dependencia en el modulo principal de nuestra aplicacion, Como no lo tenemos en el script basico de Angular, debemos instalark incluyendo el script del codigo Javascript del modulo ngRoute. lo conseguimos ‘Nota: Ojo que esta ruta no debes copiar y pegarla tal cusl, Muchas veces usarés e] CDN correspondiente y eberis asequrarte de estar usando en el médulo ngRoute de la misma versisn de Angularls que cargaste Inicalmente, Otro detalle es que este script lo tienes que incuir después de haber incuido el script del core de aangularJs. 6.1. .- Inyeccién de dependencias El segundo paso seria inyectar la dependencia con ngRoute en el médulo general de nuestra aplicacion, Esto lo hacemos en la llamada al método module con el que iniciamos cualquier programa AngularJS, indicando el nombre de las dependencias a inyectar en un array. angular.module("app", ["ngRoute"}) Hasta ahora este array de dependencias, cuando lamabamos a angular modulo(), estaba siempre vacio. A medida que se compliquen nuestras aplicaciones podremos necesitar inyectar mas cosas. Por ejemplo, las directivas creadas por terceros desarrolladores también las inyectarse de esta manera en tu médulo principal de la aplicacién. Eso lo veremos mas adelante. 6.1.4.- Configurar el sistema de enrutado con SrouteProvider El sistema de enrutado de AngularJS nos permite configurar las rutas que queremos crear en nuestra aplicacién de una manera declarativa. Aunque sea un componente bastante complejo internamente, podemos configurarlo de una manera ciertamente sencilla. srouteprovider tiene un par de métodos. El primero es when(), que nos sirve para indicar qué se debe hacer en cada ruta que se desee configurar, y el método otherwise() que nos sirve para marcar un comportamiento cuando se intente acceder a cualquier otra ruta no declarada. Esta configuracién se debe realizar dentro del método config), que pertenece al modelo. De hecho, solo podemos inyectar $routeProvider en el métado config() de configuracién. angular.module("app", _["ngRoute"]) -config(function( $routeProvider){ //eontiguracion y definicién de las rutas ye Las rutas las configuras por medio del método when) que recibe dos parametros. Por un lado la ruta que se est configurando y por otro lado un objeto que tendré los valores asociados a esa ruta. De momento vamos a conocer solo éstos que serian los fundamentales para empezar. + "controller", para indicar el controlador === ea Manual de AngularJS - Desarrol ‘controllerAs", el nombre con el que se conocer el scope dentro de esa plantilla ‘templateUr!", el nombre del archivo, 0 ruta, donde se encuentra el HTML de la vista que se dabe cargar cuando se acceda a la ruta. Podemos ver un ejemplo completo de configuracién de rutas. angular.module("app", _["ngRoute"]) -config( function($routeProvider){ SrouteProvider when("/", { controller: "appctrl", controlleras: "va", templateUrl: "home. html" ) When("/descargas", { controller: "appctri", controlleras: "vn", Templateurl: "descargas. ntml" ) Wwhen("/opelones", { controller: "appctri", controlleras: "vm", templateUrl: "opciones. html" » » ‘controller("appctrl", function(){ //cédigo del controlador (10 estoy usando en todas las rutas, en este sencillo ejemplo) yD: Hemos encadenado varias llamadas a métodos when() sobre el $routeProvider, para definir cada una de las rutas que tendremos en nuestra pequefia aplicacién. Nota: Observa que en cada una de las nutes tenamas defnido ©] mismo controlador Esto no tane por qué sar asi, podras perfectamente tener un controlador distinto para cada ruta del sistema. Para finalizar, podemos ver el cédigo HTML de una pagina donde usariamos estas rutas.