AngularJS - Guía rápida

¿Qué es AngularJS?

AngularJS es un marco de aplicación web de código abierto. Fue desarrollado originalmente en 2009 por Misko Hevery y Adam Abrons. Ahora es mantenido por Google. Su última versión es 1.4.3.

La definición de AngularJS tal como lo indica su documentación oficial es la siguiente:

AngularJS es un marco estructural para aplicaciones web dinámicas. Le permite usar HTML como su lenguaje de plantilla y le permite extender la sintaxis de HTML para expresar los componentes de su aplicación de manera clara y sucinta. El enlace de datos de Angular y la inyección de dependencias eliminan gran parte del código que tiene que escribir actualmente. Y todo sucede dentro del navegador, lo que lo convierte en un socio ideal para cualquier tecnología de servidor.

Caracteristicas

  • AngularJS es un potente marco de desarrollo basado en JavaScript para crear una aplicación de Internet RICA (RIA).

  • AngularJS ofrece a los desarrolladores opciones para escribir aplicaciones del lado del cliente (usando JavaScript) de una manera limpia MVC (Model View Controller).

  • La aplicación escrita en AngularJS es compatible con varios navegadores. AngularJS maneja automáticamente el código JavaScript adecuado para cada navegador.

  • AngularJS es de código abierto, completamente gratuito y utilizado por miles de desarrolladores en todo el mundo. Tiene licencia de Apache License versión 2.0.

En general, AngularJS es un marco para crear aplicaciones web a gran escala y de alto rendimiento mientras las mantiene tan fáciles de mantener.

Funciones principales

Las siguientes son las características principales más importantes de AngularJS:

  • Data-binding - Es la sincronización automática de datos entre el modelo y los componentes de la vista.

  • Scope- Son objetos que hacen referencia al modelo. Actúan como un pegamento entre el controlador y la vista.

  • Controller - Estas son funciones de JavaScript que están vinculadas a un ámbito particular.

  • Services- AngularJS viene con varios servicios integrados, por ejemplo $ https: para hacer un XMLHttpRequests. Estos son objetos singleton que se instancian solo una vez en la aplicación.

  • Filters - Estos seleccionan un subconjunto de elementos de una matriz y devuelven una nueva matriz.

  • Directives- Las directivas son marcadores en elementos DOM (como elementos, atributos, css y más). Estos se pueden utilizar para crear etiquetas HTML personalizadas que sirven como nuevos widgets personalizados. AngularJS tiene directivas integradas (ngBind, ngModel ...)

  • Templates- Estas son la vista renderizada con información del controlador y el modelo. Estos pueden ser un solo archivo (como index.html) o múltiples vistas en una página usando "parciales".

  • Routing - Es el concepto de cambio de vistas.

  • Model View Whatever- MVC es un patrón de diseño para dividir una aplicación en diferentes partes (llamadas Modelo, Vista y Controlador), cada una con distintas responsabilidades. AngularJS no implementa MVC en el sentido tradicional, sino algo más cercano a MVVM (Model-View-ViewModel). El equipo de Angular JS lo refiere con humor como Model View Whatever.

  • Deep Linking- La vinculación profunda le permite codificar el estado de la aplicación en la URL para que se pueda marcar. Luego, la aplicación se puede restaurar desde la URL al mismo estado.

  • Dependency Injection - AngularJS tiene un subsistema de inyección de dependencia incorporado que ayuda al desarrollador al hacer que la aplicación sea más fácil de desarrollar, comprender y probar.

Conceptos

El siguiente diagrama muestra algunas partes importantes de AngularJS que analizaremos en detalle en los capítulos siguientes.

Ventajas de AngularJS

  • AngularJS proporciona la capacidad de crear una aplicación de página única de una manera muy limpia y fácil de mantener.

  • AngularJS proporciona capacidad de enlace de datos a HTML, lo que brinda al usuario una experiencia rica y receptiva

  • El código AngularJS se puede probar por unidad.

  • AngularJS usa la inyección de dependencia y hace uso de la separación de preocupaciones.

  • AngularJS proporciona componentes reutilizables.

  • Con AngularJS, el desarrollador escribe menos código y obtiene más funcionalidad.

  • En AngularJS, las vistas son páginas html puras y los controladores escritos en JavaScript hacen el procesamiento comercial.

Además de todo, las aplicaciones AngularJS pueden ejecutarse en todos los principales navegadores y teléfonos inteligentes, incluidos teléfonos / tabletas con Android e iOS.

Desventajas de AngularJS

Aunque AngularJS viene con muchos puntos positivos, pero al mismo tiempo deberíamos considerar los siguientes puntos:

  • Not Secure- Al ser solo un marco de JavaScript, las aplicaciones escritas en AngularJS no son seguras. La autenticación y autorización del lado del servidor es imprescindible para mantener segura una aplicación.

  • Not degradable - Si el usuario de su aplicación deshabilita JavaScript, el usuario solo verá la página básica y nada más.

Los componentes de AngularJS

El marco de AngularJS se puede dividir en las siguientes tres partes principales:

  • ng-app - Esta directiva define y vincula una aplicación AngularJS a HTML.

  • ng-model - Esta directiva vincula los valores de los datos de la aplicación AngularJS a los controles de entrada HTML.

  • ng-bind - Esta directiva vincula los datos de la aplicación AngularJS a las etiquetas HTML.

En este capítulo analizaremos cómo configurar la biblioteca AngularJS para usarla en el desarrollo de aplicaciones web. También estudiaremos brevemente la estructura del directorio y su contenido.

Cuando abres el enlace https://angularjs.org/, verá que hay dos opciones para descargar la biblioteca AngularJS:

  • View on GitHub - Haga clic en este botón para ir a GitHub y obtener todos los scripts más recientes.

  • Download AngularJS 1 - O haga clic en este botón, se verá una pantalla como la siguiente -

  • Esta pantalla ofrece varias opciones para usar Angular JS de la siguiente manera:

    • Downloading and hosting files locally

      • Hay dos opciones diferentes legacy y latest. Los nombres en sí son autodescriptivos.legacy tiene una versión inferior a 1.2.xy latest tiene la versión 1.5.x.

      • También podemos optar por la versión minificada, sin comprimir o con cremallera.

    • CDN access- También tienes acceso a un CDN. La CDN le dará acceso en todo el mundo a centros de datos regionales que, en este caso, alojan Google. Esto significa que el uso de CDN traslada la responsabilidad de alojar archivos de sus propios servidores a una serie de servidores externos. Esto también ofrece la ventaja de que si el visitante de su página web ya ha descargado una copia de AngularJS del mismo CDN, no tendrá que volver a descargarla.

  • Try the new angularJS 2 - Haga clic en este botón para descargar la versión beta 2 de Angular JS. Esta versión es muy rápida, compatible con dispositivos móviles y flexible en comparación con la versión heredada y la más reciente de AngularJS 1

Estamos utilizando las versiones CDN de la biblioteca a lo largo de este tutorial.

Ejemplo

Ahora escribamos un ejemplo simple usando la biblioteca AngularJS. Creemos un archivo HTML myfirstexample.html como se muestra a continuación:

<!doctype html>
<html>
   
   <head>
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.5.2/angular.min.js"></script>
   </head>
   
   <body ng-app = "myapp">
      
      <div ng-controller = "HelloController" >
         <h2>Welcome {{helloTo.title}} to the world of Tutorialspoint!</h2>
      </div>
      
      <script>
         angular.module("myapp", [])
         
         .controller("HelloController", function($scope) {
            $scope.helloTo = {};
            $scope.helloTo.title = "AngularJS";
         });
      </script>
      
   </body>
</html>

Las siguientes secciones describen el código anterior en detalle:

Incluir AngularJS

Hemos incluido el archivo JavaScript de AngularJS en la página HTML para que podamos usar AngularJS -

<head>
   <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
</head>

Si desea actualizar a la última versión de Angular JS, use la siguiente fuente de secuencia de comandos o consulte la última versión de AngularJS en su sitio web oficial.

<head>
   <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.5.2/angular.min.js"></script>
</head>

Apunta a la aplicación AngularJS

A continuación, le contamos qué parte del HTML contiene la aplicación AngularJS. Esto se hace agregando el atributo ng-app al elemento HTML raíz de la aplicación AngularJS. Puede agregarlo al elemento html o al elemento del cuerpo como se muestra a continuación:

<body ng-app = "myapp">
</body>

Ver

La vista es esta parte -

<div ng-controller = "HelloController" >
   <h2>Welcome {{helloTo.title}} to the world of Tutorialspoint!</h2>
</div>

ng-controller le dice a AngularJS qué controlador usar con esta vista. helloTo.title le dice a AngularJS que escriba el valor del "modelo" llamado helloTo.title en el HTML en esta ubicación.

Controlador

La parte del controlador es:

<script>
   angular.module("myapp", [])
   
   .controller("HelloController", function($scope) {
      $scope.helloTo = {};
      $scope.helloTo.title = "AngularJS";
   });
</script>

Este código registra una función de controlador llamada HelloController en el módulo angular llamado myapp . Estudiaremos más sobre módulos y controladores en sus respectivos capítulos. La función del controlador se registra en angular mediante la llamada de función angular.module (...). Controller (...).

El parámetro $ scope que se pasa a la función del controlador es el modelo . La función del controlador agrega un objeto helloTo JavaScript, y en ese objeto agrega un campo de título .

Ejecución

Guarde el código anterior como myfirstexample.html y ábralo en cualquier navegador. Verá una salida como la siguiente:

Welcome AngularJS to the world of Tutorialspoint!

Cuando la página se carga en el navegador, suceden las siguientes cosas:

  • El documento HTML se carga en el navegador y el navegador lo evalúa. Se carga el archivo JavaScript de AngularJS, se crea el objeto global angular . A continuación, se ejecuta JavaScript que registra las funciones del controlador.

  • Siguiente AngularJS escanea a través del HTML para buscar aplicaciones y vistas de AngularJS. Una vez que se encuentra la vista, la conecta a la función del controlador correspondiente.

  • A continuación, AngularJS ejecuta las funciones del controlador. Luego, renderiza las vistas con datos del modelo poblado por el controlador. La página ya está lista.

Model Vver Controller o MVC, como se le llama popularmente, es un patrón de diseño de software para desarrollar aplicaciones web. Un patrón de controlador de vista de modelo se compone de las siguientes tres partes:

  • Model - Es el nivel más bajo del patrón responsable de mantener los datos.

  • View - Es el responsable de mostrar al usuario todos o una parte de los datos.

  • Controller - Es un código de software que controla las interacciones entre el modelo y la vista.

MVC es popular porque aísla la lógica de la aplicación de la capa de interfaz de usuario y admite la separación de preocupaciones. El controlador recibe todas las solicitudes de la aplicación y luego trabaja con el modelo para preparar los datos que necesita la vista. La vista luego usa los datos preparados por el controlador para generar una respuesta presentable final. La abstracción MVC se puede representar gráficamente de la siguiente manera.

El modelo

El modelo es responsable de administrar los datos de la aplicación. Responde a la solicitud de la vista y a las instrucciones del controlador para actualizarse.

La vista

Una presentación de datos en un formato particular, provocada por la decisión del controlador de presentar los datos. Son sistemas de plantillas basados ​​en scripts como JSP, ASP, PHP y muy fáciles de integrar con la tecnología AJAX.

El controlador

El controlador responde a la entrada del usuario y realiza interacciones en los objetos del modelo de datos. El controlador recibe la entrada, la valida y luego realiza operaciones comerciales que modifican el estado del modelo de datos.

AngularJS es un marco basado en MVC. En los próximos capítulos, veremos cómo AngularJS usa la metodología MVC.

Antes de comenzar a crear una aplicación HelloWorld real usando AngularJS, veamos cuáles son las partes reales de una aplicación AngularJS. Una aplicación AngularJS consta de las siguientes tres partes importantes:

  • ng-app - Esta directiva define y vincula una aplicación AngularJS a HTML.

  • ng-model - Esta directiva vincula los valores de los datos de la aplicación AngularJS a los controles de entrada HTML.

  • ng-bind - Esta directiva vincula los datos de la aplicación AngularJS a las etiquetas HTML.

Pasos para crear la aplicación AngularJS

Paso 1: Cargar marco

Al ser un marco de JavaScript puro, se puede agregar usando la etiqueta <Script>.

<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>

Paso 2: Defina la aplicación AngularJS usando la directiva ng-app

<div ng-app = "">
   ...
</div>

Paso 3: Defina un nombre de modelo usando la directiva ng-model

<p>Enter your Name: <input type = "text" ng-model = "name"></p>

Paso 4: vincular el valor del modelo anterior definido mediante la directiva ng-bind.

<p>Hello <span ng-bind = "name"></span>!</p>

Pasos para ejecutar la aplicación AngularJS

Utilice los tres pasos mencionados anteriormente en una página HTML.

testAngularJS.htm

<html>
   <head>
      <title>AngularJS First Application</title>
   </head>
   
   <body>
      <h1>Sample Application</h1>
      
      <div ng-app = "">
         <p>Enter your Name: <input type = "text" ng-model = "name"></p>
         <p>Hello <span ng-bind = "name"></span>!</p>
      </div>
      
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      
   </body>
</html>

Salida

Abra textAngularJS.htm en un navegador web. Ingrese su nombre y vea el resultado.

Cómo AngularJS se integra con HTML

  • La directiva ng-app indica el inicio de la aplicación AngularJS.

  • La directiva ng-model luego crea una variable modelo llamada "nombre" que se puede usar con la página html y dentro del div que tiene la directiva ng-app.

  • ng-bind luego usa el modelo de nombre que se mostrará en la etiqueta html span cada vez que el usuario ingrese algo en el cuadro de texto.

  • Cerrar la etiqueta </div> indica el final de la aplicación AngularJS.

Las directivas AngularJS se utilizan para extender HTML. Estos son atributos especiales que comienzan con el prefijo ng-. Vamos a discutir las siguientes directivas:

  • ng-app - Esta directiva inicia una aplicación AngularJS.

  • ng-init - Esta directiva inicializa los datos de la aplicación.

  • ng-model - Esta directiva vincula los valores de los datos de la aplicación AngularJS a los controles de entrada HTML.

  • ng-repeat - Esta directiva repite elementos html para cada elemento de una colección.

directiva ng-app

La directiva ng-app inicia una aplicación AngularJS. Define el elemento raíz. Inicializa o arranca automáticamente la aplicación cuando se carga la página web que contiene la aplicación AngularJS. También se utiliza para cargar varios módulos AngularJS en la aplicación AngularJS. En el siguiente ejemplo, hemos definido una aplicación AngularJS predeterminada usando el atributo ng-app de un elemento div.

<div ng-app = "">
   ...
</div>

directiva ng-init

La directiva ng-init inicializa los datos de una aplicación AngularJS. Se utiliza para poner valores a las variables que se utilizarán en la aplicación. En el siguiente ejemplo, inicializaremos una serie de países. Estamos usando la sintaxis JSON para definir una variedad de países.

<div ng-app = "" ng-init = "countries = [{locale:'en-US',name:'United States'}, 
   {locale:'en-GB',name:'United Kingdom'}, {locale:'en-FR',name:'France'}]">
   ...
</div>

directiva ng-model

Esta directiva vincula los valores de los datos de la aplicación AngularJS a los controles de entrada HTML. En el siguiente ejemplo, hemos definido un modelo llamado "nombre".

<div ng-app = "">
   ...
   <p>Enter your Name: <input type = "text" ng-model = "name"></p>
</div>

directiva ng-repeat

La directiva ng-repeat repite elementos html para cada elemento de una colección. En el siguiente ejemplo, hemos iterado sobre una variedad de países.

<div ng-app = "">
   ...
   <p>List of Countries with locale:</p>
   
   <ol>
      <li ng-repeat = "country in countries">
         {{ 'Country: ' + country.name + ', Locale: ' + country.locale }}
      </li>
   </ol>
</div>

Ejemplo

El siguiente ejemplo mostrará todas las directivas mencionadas anteriormente.

testAngularJS.htm

<html>
   <head>
      <title>AngularJS Directives</title>
   </head>
   
   <body>
      <h1>Sample Application</h1>
      
      <div ng-app = "" ng-init = "countries = [{locale:'en-US',name:'United States'}, 
         {locale:'en-GB',name:'United Kingdom'}, {locale:'en-FR',name:'France'}]"> 
         <p>Enter your Name: <input type = "text" ng-model = "name"></p>
         <p>Hello <span ng-bind = "name"></span>!</p>
         <p>List of Countries with locale:</p>
      
         <ol>
            <li ng-repeat = "country in countries">
               {{ 'Country: ' + country.name + ', Locale: ' + country.locale }}
            </li>
         </ol>
      </div>
      
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      
   </body>
</html>

Salida

Abra textAngularJS.htm en un navegador web. Ingrese su nombre y vea el resultado.

Las expresiones se utilizan para vincular los datos de la aplicación a html. Las expresiones se escriben entre llaves dobles como {{expresión}}. Las expresiones se comportan de la misma forma que las directivas ng-bind. Las expresiones de la aplicación AngularJS son expresiones javascript puras y generan los datos donde se utilizan.

Usando números

<p>Expense on Books : {{cost * quantity}} Rs</p>

Usando cadenas

<p>Hello {{student.firstname + " " + student.lastname}}!</p>

Usando objeto

<p>Roll No: {{student.rollno}}</p>

Usando matriz

<p>Marks(Math): {{marks[3]}}</p>

Ejemplo

El siguiente ejemplo mostrará todas las expresiones mencionadas anteriormente.

testAngularJS.htm

<html>
   <head>
      <title>AngularJS Expressions</title>
   </head>
   
   <body>
      <h1>Sample Application</h1>
      
      <div ng-app = "" ng-init = "quantity = 1;cost = 30; 
         student = {firstname:'Mahesh',lastname:'Parashar',rollno:101};
         marks = [80,90,75,73,60]">
         <p>Hello {{student.firstname + " " + student.lastname}}!</p>
         <p>Expense on Books : {{cost * quantity}} Rs</p>
         <p>Roll No: {{student.rollno}}</p>
         <p>Marks(Math): {{marks[3]}}</p>
      </div>
      
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      
   </body>
</html>

Salida

Abra textAngularJS.htm en un navegador web. Vea el resultado.

La aplicación AngularJS se basa principalmente en controladores para controlar el flujo de datos en la aplicación. Un controlador se define mediante la directiva ng-controller. Un controlador es un objeto JavaScript que contiene atributos / propiedades y funciones. Cada controlador acepta $ scope como un parámetro que se refiere a la aplicación / módulo que el controlador debe controlar.

<div ng-app = "" ng-controller = "studentController">
   ...
</div>

Aquí hemos declarado un controlador studentControllerusando la directiva ng-controller. Como siguiente paso, definiremos studentController de la siguiente manera:

<script>
   function studentController($scope) {
      $scope.student = {
         firstName: "Mahesh",
         lastName: "Parashar",
         
         fullName: function() {
            var studentObject;
            studentObject = $scope.student;
            return studentObject.firstName + " " + studentObject.lastName;
         }
      };
   }
</script>
  • studentController definido como un objeto JavaScript con $ scope como argumento.

  • $ scope se refiere a la aplicación que utilizará el objeto studentController.

  • $ scope.student es propiedad del objeto studentController.

  • firstName y lastName son dos propiedades del objeto $ scope.student. Les hemos pasado los valores predeterminados.

  • fullName es la función del objeto $ scope.student cuya tarea es devolver el nombre combinado.

  • En la función fullName obtenemos el objeto de estudiante y luego devolvemos el nombre combinado.

  • Como nota, también podemos definir el objeto del controlador en un archivo JS separado y hacer referencia a ese archivo en la página html.

Ahora podemos usar la propiedad de estudiante de studentController usando ng-model o usando expresiones de la siguiente manera.

Enter first name: <input type = "text" ng-model = "student.firstName"><br>
Enter last name: <input type = "text" ng-model = "student.lastName"><br>
<br>
You are entering: {{student.fullName()}}
  • Hemos acotado student.firstName y student.lastname a dos casillas de entrada.

  • Hemos limitado student.fullName () a HTML.

  • Ahora, cada vez que escribe algo en los cuadros de entrada de nombre y apellido, puede ver que el nombre completo se actualiza automáticamente.

Ejemplo

El siguiente ejemplo mostrará el uso del controlador.

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Controller</title>
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "mainApp" ng-controller = "studentController">
         Enter first name: <input type = "text" ng-model = "student.firstName"><br>
         <br>
         Enter last name: <input type = "text" ng-model = "student.lastName"><br>
         <br>
         You are entering: {{student.fullName()}}
      </div>
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.controller('studentController', function($scope) {
            $scope.student = {
               firstName: "Mahesh",
               lastName: "Parashar",
               
               fullName: function() {
                  var studentObject;
                  studentObject = $scope.student;
                  return studentObject.firstName + " " + studentObject.lastName;
               }
            };
         });
      </script>
      
   </body>
</html>

Salida

Abra textAngularJS.htm en un navegador web. Vea el resultado.

Los filtros se utilizan para cambiar la modificación de los datos y se pueden aporrear en expresiones o directivas utilizando el carácter de barra vertical. A continuación se muestra la lista de filtros de uso común.

No Señor. Nombre y descripción
1

uppercase

convierte un texto en texto en mayúsculas.

2

lowercase

convierte un texto en texto en minúsculas.

3

currency

da formato al texto en formato de moneda.

4

filter

filtrar la matriz a un subconjunto de la misma según los criterios proporcionados.

5

orderby

ordena la matriz según los criterios proporcionados.

filtro de mayúsculas

Agregue un filtro de mayúsculas a una expresión mediante el carácter de barra vertical. Aquí hemos agregado un filtro de mayúsculas para imprimir el nombre del estudiante en todas las letras mayúsculas.

Enter first name:<input type = "text" ng-model = "student.firstName">
Enter last name: <input type = "text" ng-model = "student.lastName">
Name in Upper Case: {{student.fullName() | uppercase}}

filtro de minúsculas

Agregue un filtro en minúsculas a una expresión usando un carácter de barra vertical. Aquí hemos agregado un filtro de minúsculas para imprimir el nombre del estudiante en todas las letras minúsculas.

Enter first name:<input type = "text" ng-model = "student.firstName">
Enter last name: <input type = "text" ng-model = "student.lastName">
Name in Lower Case: {{student.fullName() | lowercase}}

filtro de moneda

Agregue un filtro de moneda a una expresión que devuelva un número mediante el carácter de barra vertical. Aquí hemos agregado un filtro de moneda para imprimir tarifas usando formato de moneda.

Enter fees: <input type = "text" ng-model = "student.fees">
fees: {{student.fees | currency}}

filtro filtro

Para mostrar solo los temas obligatorios, hemos utilizado subjectName como filtro.

Enter subject: <input type = "text" ng-model = "subjectName">
Subject:
<ul>
   <li ng-repeat = "subject in student.subjects | filter: subjectName">
      {{ subject.name + ', marks:' + subject.marks }}
   </li>
</ul>

orden por filtro

Para ordenar materias por marcas, hemos utilizado orderBy marks.

Subject:
<ul>
   <li ng-repeat = "subject in student.subjects | orderBy:'marks'">
      {{ subject.name + ', marks:' + subject.marks }}
   </li>
</ul>

Ejemplo

El siguiente ejemplo mostrará todos los filtros mencionados anteriormente.

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Filters</title>
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "mainApp" ng-controller = "studentController">
         <table border = "0">
            <tr>
               <td>Enter first name:</td>
               <td><input type = "text" ng-model = "student.firstName"></td>
            </tr>
            <tr>
               <td>Enter last name: </td>
               <td><input type = "text" ng-model = "student.lastName"></td>
            </tr>
            <tr>
               <td>Enter fees: </td>
               <td><input type = "text" ng-model = "student.fees"></td>
            </tr>
            <tr>
               <td>Enter subject: </td>
               <td><input type = "text" ng-model = "subjectName"></td>
            </tr>
         </table>
         <br/>
         
         <table border = "0">
            <tr>
               <td>Name in Upper Case: </td><td>{{student.fullName() | uppercase}}</td>
            </tr>
            <tr>
               <td>Name in Lower Case: </td><td>{{student.fullName() | lowercase}}</td>
            </tr>
            <tr>
               <td>fees: </td><td>{{student.fees | currency}}
               </td>
            </tr>
            <tr>
               <td>Subject:</td>
               <td>
                  <ul>
                     <li ng-repeat = "subject in student.subjects | filter: subjectName |orderBy:'marks'">
                        {{ subject.name + ', marks:' + subject.marks }}
                     </li>
                  </ul>
               </td>
            </tr>
         </table>
      </div>
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.controller('studentController', function($scope) {
            $scope.student = {
               firstName: "Mahesh",
               lastName: "Parashar",
               fees:500,
               
               subjects:[
                  {name:'Physics',marks:70},
                  {name:'Chemistry',marks:80},
                  {name:'Math',marks:65}
               ],
               
               fullName: function() {
                  var studentObject;
                  studentObject = $scope.student;
                  return studentObject.firstName + " " + studentObject.lastName;
               }
            };
         });
      </script>
      
   </body>
</html>

Salida

Abra textAngularJS.htm en un navegador web. Vea el resultado.

Los datos de la tabla normalmente son repetibles por naturaleza. La directiva ng-repeat se puede utilizar para dibujar una tabla fácilmente. El siguiente ejemplo indica el uso de la directiva ng-repeat para dibujar una tabla.

<table>
   <tr>
      <th>Name</th>
      <th>Marks</th>
   </tr>
   
   <tr ng-repeat = "subject in student.subjects">
      <td>{{ subject.name }}</td>
      <td>{{ subject.marks }}</td>
   </tr>
</table>

La tabla se puede diseñar con estilos CSS.

<style>
   table, th , td {
      border: 1px solid grey;
      border-collapse: collapse;
      padding: 5px;
   }
   
   table tr:nth-child(odd) {
      background-color: #f2f2f2;
   }

   table tr:nth-child(even) {
      background-color: #ffffff;
   }
</style>

Ejemplo

El siguiente ejemplo mostrará todas las directivas mencionadas anteriormente.

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Table</title>
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
      
      <style>
         table, th , td {
            border: 1px solid grey;
            border-collapse: collapse;
            padding: 5px;
         }

         table tr:nth-child(odd) {
            background-color: #f2f2f2;
         }

         table tr:nth-child(even) {
            background-color: #ffffff;
         }
      </style>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      <div ng-app = "mainApp" ng-controller = "studentController">
         
         <table border = "0">
            <tr>
               <td>Enter first name:</td>
               <td><input type = "text" ng-model = "student.firstName"></td>
            </tr>
            <tr>
               <td>Enter last name: </td>
               <td>
                  <input type = "text" ng-model = "student.lastName">
               </td>
            </tr>
            <tr>
               <td>Name: </td>
               <td>{{student.fullName()}}</td>
            </tr>
            <tr>
               <td>Subject:</td>
               
               <td>
                  <table>
                     <tr>
                        <th>Name</th>.
                        <th>Marks</th>
                     </tr>
                     <tr ng-repeat = "subject in student.subjects">
                        <td>{{ subject.name }}</td>
                        <td>{{ subject.marks }}</td>
                     </tr>
                  </table>
               </td>
            </tr>
         </table>
      </div>
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.controller('studentController', function($scope) {
            $scope.student = {
               firstName: "Mahesh",
               lastName: "Parashar",
               fees:500,
               
               subjects:[
                  {name:'Physics',marks:70},
                  {name:'Chemistry',marks:80},
                  {name:'Math',marks:65},
                  {name:'English',marks:75},
                  {name:'Hindi',marks:67}
               ],
               
               fullName: function() {
                  var studentObject;
                  studentObject = $scope.student;
                  return studentObject.firstName + " " + studentObject.lastName;
               }
            };
         });
      </script>
      
   </body>
</html>

Salida

Abra textAngularJS.htm en un navegador web. Vea el resultado.

Las siguientes directivas se pueden utilizar para vincular los datos de la aplicación a los atributos de HTML DOM Elements.

No Señor. Nombre y descripción
1

ng-disabled

desactiva un control determinado.

2

ng-show

muestra un control dado.

3

ng-hide

oculta un control dado.

4

ng-click

representa un evento de clic de AngularJS.

directiva ng-disabled

Agregue el atributo ng-disabled a un botón HTML y pásele un modelo. Enlace el modelo a una casilla de verificación y vea la variación.

<input type = "checkbox" ng-model = "enableDisableButton">Disable Button
<button ng-disabled = "enableDisableButton">Click Me!</button>

directiva ng-show

Agregue el atributo ng-show a un botón HTML y pásele un modelo. Vincular el modelo a una casilla de verificación y ver la variación.

<input type = "checkbox" ng-model = "showHide1">Show Button
<button ng-show = "showHide1">Click Me!</button>

directiva ng-hide

Agregue el atributo ng-hide a un botón HTML y pásele un modelo. Enlace el modelo a una casilla de verificación y vea la variación.

<input type = "checkbox" ng-model = "showHide2">Hide Button
<button ng-hide = "showHide2">Click Me!</button>

directiva ng-click

Agregue el atributo ng-click a un botón HTML y actualice un modelo. Enlace el modelo a html y vea la variación.

<p>Total click: {{ clickCounter }}</p>
<button ng-click = "clickCounter = clickCounter + 1">Click Me!</button>

Ejemplo

El siguiente ejemplo mostrará todas las directivas mencionadas anteriormente.

testAngularJS.htm

<html>
   <head>
      <title>AngularJS HTML DOM</title>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "">
         <table border = "0">
            <tr>
               <td><input type = "checkbox" ng-model = "enableDisableButton">Disable Button</td>
               <td><button ng-disabled = "enableDisableButton">Click Me!</button></td>
            </tr>
            
            <tr>
               <td><input type = "checkbox" ng-model = "showHide1">Show Button</td>
               <td><button ng-show = "showHide1">Click Me!</button></td>
            </tr>
            
            <tr>
               <td><input type = "checkbox" ng-model = "showHide2">Hide Button</td>
               <td><button ng-hide = "showHide2">Click Me!</button></td>
            </tr>
            
            <tr>
               <td><p>Total click: {{ clickCounter }}</p></td>
               <td><button ng-click = "clickCounter = clickCounter + 1">Click Me!</button></td>
            </tr>
         </table>
      </div>
      
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      
   </body>
</html>

Salida

Abra textAngularJS.htm en un navegador web. Vea el resultado.

AngularJS admite un enfoque modular. Los módulos se utilizan para separar lógicas, como servicios, controladores, aplicaciones, etc. y mantener el código limpio. Definimos módulos en archivos js separados y los nombramos según el archivo module.js. En este ejemplo vamos a crear dos módulos.

  • Application Module - utilizado para inicializar una aplicación con controlador (es).

  • Controller Module - utilizado para definir el controlador.

Módulo de aplicación

mainApp.js

var mainApp = angular.module("mainApp", []);

Aquí hemos declarado una aplicación. mainAppmódulo usando la función angular.module. Le hemos pasado una matriz vacía. Esta matriz generalmente contiene módulos dependientes.

Módulo controlador

studentController.js

mainApp.controller("studentController", function($scope) {
   $scope.student = {
      firstName: "Mahesh",
      lastName: "Parashar",
      fees:500,
      
      subjects:[
         {name:'Physics',marks:70},
         {name:'Chemistry',marks:80},
         {name:'Math',marks:65},
         {name:'English',marks:75},
         {name:'Hindi',marks:67}
      ],
      
      fullName: function() {
         var studentObject;
         studentObject = $scope.student;
         return studentObject.firstName + " " + studentObject.lastName;
      }
   };
});

Aquí hemos declarado un controlador studentController módulo usando la función mainApp.controller.

Usar módulos

<div ng-app = "mainApp" ng-controller = "studentController">
   ...
   <script src = "mainApp.js"></script>
   <script src = "studentController.js"></script>
	
</div>

Aquí hemos usado el módulo de aplicación usando la directiva ng-app y el controlador usando la directiva ng-controller. Hemos importado mainApp.js y studentController.js en la página principal html.

Ejemplo

El siguiente ejemplo mostrará todos los módulos mencionados anteriormente.

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Modules</title>
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
      <script src = "/angularjs/src/module/mainApp.js"></script>
      <script src = "/angularjs/src/module/studentController.js"></script>
      
      <style>
         table, th , td {
            border: 1px solid grey;
            border-collapse: collapse;
            padding: 5px;
         }
         
         table tr:nth-child(odd) {
            background-color: #f2f2f2;
         }
         
         table tr:nth-child(even) {
            background-color: #ffffff;
         }
      </style>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      <div ng-app = "mainApp" ng-controller = "studentController">
         
         <table border = "0">
            <tr>
               <td>Enter first name:</td>
               <td><input type = "text" ng-model = "student.firstName"></td>
            </tr>
         
            <tr>
               <td>Enter last name: </td>
               <td><input type = "text" ng-model = "student.lastName"></td>
            </tr>
         
            <tr>
               <td>Name: </td>
               <td>{{student.fullName()}}</td>
            </tr>
         
            <tr>
               <td>Subject:</td>
               
               <td>
                  <table>
                     <tr>
                        <th>Name</th>
                        <th>Marks</th>
                     </tr>
                     <tr ng-repeat = "subject in student.subjects">
                        <td>{{ subject.name }}</td>
                        <td>{{ subject.marks }}</td>
                     </tr>
                  </table>
               </td>
            </tr>
         </table>
      </div>
      
   </body>
</html>

mainApp.js

var mainApp = angular.module("mainApp", []);

studentController.js

mainApp.controller("studentController", function($scope) {
   $scope.student = {
      firstName: "Mahesh",
      lastName: "Parashar",
      fees:500,
      
      subjects:[
         {name:'Physics',marks:70},
         {name:'Chemistry',marks:80},
         {name:'Math',marks:65},
         {name:'English',marks:75},
         {name:'Hindi',marks:67}
      ],
      
      fullName: function() {
         var studentObject;
         studentObject = $scope.student;
         return studentObject.firstName + " " + studentObject.lastName;
      }
   };
});

Salida

Abra textAngularJS.htm en un navegador web. Vea el resultado.

AngularJS enriquece el llenado y la validación de formularios. Podemos usar ng-click para manejar el clic en el botón de AngularJS y usar las banderas $ dirty y $ invalid para hacer las validaciones de una manera sencilla. Utilice novalidate con una declaración de formulario para deshabilitar cualquier validación específica del navegador. Los controles de formularios hacen un uso intensivo de los eventos angulares. Primero echemos un vistazo rápido a los eventos.

Eventos

AngularJS proporciona múltiples eventos que se pueden asociar con los controles HTML. Por ejemplo, ng-click normalmente se asocia con button. A continuación se muestran los eventos admitidos en Angular JS.

  • ng-click
  • ng-dbl-click
  • ng-mousedown
  • ng-mouseup
  • ng-mouseenter
  • ng-mouseleave
  • ng-mousemove
  • ng-mouseover
  • ng-keydown
  • ng-keyup
  • ng-keypress
  • ng-change

ng-clic

Restablezca los datos de un formulario utilizando la directiva al hacer clic de un botón.

<input name = "firstname" type = "text" ng-model = "firstName" required>
<input name = "lastname" type = "text" ng-model = "lastName" required>
<input name = "email" type = "email" ng-model = "email" required>
<button ng-click = "reset()">Reset</button>

<script>
   function studentController($scope) { 
      $scope.reset = function() {
         $scope.firstName = "Mahesh";
         $scope.lastName = "Parashar";
         $scope.email = "[email protected]";
      }   
      
      $scope.reset();
   }
</script>

Validar datos

Lo siguiente se puede usar para rastrear errores.

  • $dirty - indica que se ha cambiado el valor.

  • $invalid - indica que el valor ingresado no es válido.

  • $error - indica el error exacto.

Ejemplo

El siguiente ejemplo mostrará todas las directivas mencionadas anteriormente.

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Forms</title>
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
      
      <style>
         table, th , td {
            border: 1px solid grey;
            border-collapse: collapse;
            padding: 5px;
         }
         
         table tr:nth-child(odd) {
            background-color: #f2f2f2;
         }
         
         table tr:nth-child(even) {
            background-color: #ffffff;
         }
      </style>
      
   </head>
   <body>
      
      <h2>AngularJS Sample Application</h2>
      <div ng-app = "mainApp" ng-controller = "studentController">
         
         <form name = "studentForm" novalidate>
            <table border = "0">
               <tr>
                  <td>Enter first name:</td>
                  <td><input name = "firstname" type = "text" ng-model = "firstName" required>
                     <span style = "color:red" ng-show = "studentForm.firstname.$dirty && studentForm.firstname.$invalid">
                        <span ng-show = "studentForm.firstname.$error.required">First Name is required.</span>
                     </span>
                  </td>
               </tr>
               
               <tr>
                  <td>Enter last name: </td>
                  <td><input name = "lastname"  type = "text" ng-model = "lastName" required>
                     <span style = "color:red" ng-show = "studentForm.lastname.$dirty && studentForm.lastname.$invalid">
                        <span ng-show = "studentForm.lastname.$error.required">Last Name is required.</span>
                     </span>
                  </td>
               </tr>
               
               <tr>
                  <td>Email: </td><td><input name = "email" type = "email" ng-model = "email" length = "100" required>
                     <span style = "color:red" ng-show = "studentForm.email.$dirty && studentForm.email.$invalid">
                        <span ng-show = "studentForm.email.$error.required">Email is required.</span>
                        <span ng-show = "studentForm.email.$error.email">Invalid email address.</span>
                     </span>
                  </td>
               </tr>
               
               <tr>
                  <td>
                     <button ng-click = "reset()">Reset</button>
                  </td>
                  <td>
                     <button ng-disabled = "studentForm.firstname.$dirty &&
                        studentForm.firstname.$invalid || studentForm.lastname.$dirty &&
                        studentForm.lastname.$invalid || studentForm.email.$dirty &&
                        studentForm.email.$invalid" ng-click="submit()">Submit</button>
                  </td>
               </tr>
					
            </table>
         </form>
      </div>
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.controller('studentController', function($scope) {
            $scope.reset = function() {
               $scope.firstName = "Mahesh";
               $scope.lastName = "Parashar";
               $scope.email = "[email protected]";
            }
            
            $scope.reset();
         });
      </script>
      
   </body>
</html>

Salida

Abra textAngularJS.htm en un navegador web. Vea el resultado.

HTML no admite la incrustación de páginas html dentro de una página html. Para lograr esta funcionalidad se utilizan las siguientes formas:

  • Using Ajax - Realice una llamada al servidor para obtener la página html correspondiente y configurarla en innerHTML del control html.

  • Using Server Side Includes - JSP, PHP y otras tecnologías de servidor del lado web pueden incluir páginas html dentro de una página dinámica.

Usando AngularJS, podemos incrustar páginas HTML dentro de una página HTML usando la directiva ng-include.

<div ng-app = "" ng-controller = "studentController">
   <div ng-include = "'main.htm'"></div>
   <div ng-include = "'subjects.htm'"></div>
</div>

Ejemplo

tryAngularJS.htm

<html>
   <head>
      <title>Angular JS Includes</title>
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      
      <style>
         table, th , td {
            border: 1px solid grey;
            border-collapse: collapse;
            padding: 5px;
         }
         
         table tr:nth-child(odd) {
            background-color: #f2f2f2;
         }
         
         table tr:nth-child(even) {
            background-color: #ffffff;
         }
      </style>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "mainApp" ng-controller = "studentController">
         <div ng-include = "'/angularjs/src/include/main.htm'"></div>
         <div ng-include = "'/angularjs/src/include/subjects.htm'"></div>
      </div>
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.controller('studentController', function($scope) {
            $scope.student = {
               firstName: "Mahesh",
               lastName: "Parashar",
               fees:500,
               
               subjects:[
                  {name:'Physics',marks:70},
                  {name:'Chemistry',marks:80},
                  {name:'Math',marks:65},
                  {name:'English',marks:75},
                  {name:'Hindi',marks:67}
               ],
               
               fullName: function() {
                  var studentObject;
                  studentObject = $scope.student;
                  return studentObject.firstName + " " + studentObject.lastName;
               }
            };
         });
      </script>
      
   </body>
</html>

main.htm

<table border = "0">
   <tr>
      <td>Enter first name:</td>
      <td><input type = "text" ng-model = "student.firstName"></td>
   </tr>
   
   <tr>
      <td>Enter last name: </td>
      <td><input type = "text" ng-model = "student.lastName"></td>
   </tr>
   
   <tr>
      <td>Name: </td>
      <td>{{student.fullName()}}</td>
   </tr>
</table>

subject.htm

<p>Subjects:</p>
<table>
   <tr>
      <th>Name</th>
      <th>Marks</th>
   </tr>
   
   <tr ng-repeat = "subject in student.subjects">
      <td>{{ subject.name }}</td>
      <td>{{ subject.marks }}</td>
   </tr>
</table>

Salida

Para ejecutar este ejemplo, debe implementar textAngularJS.htm, main.htm y subject.htm en un servidor web. Abra textAngularJS.htm usando la URL de su servidor en un navegador web. Vea el resultado.

AngularJS proporciona $ https: control que funciona como un servicio para leer datos del servidor. El servidor realiza una llamada a la base de datos para obtener los registros deseados. AngularJS necesita datos en formato JSON. Una vez que los datos están listos, $ https: se puede usar para obtener los datos del servidor de la siguiente manera:

function studentController($scope,$https:) {
   var url = "data.txt";

   $https:.get(url).success( function(response) {
      $scope.students = response; 
   });
}

Aquí, el archivo data.txt contiene registros de estudiantes. $ https: el servicio realiza una llamada ajax y establece una respuesta a sus estudiantes de propiedad. El modelo de los estudiantes se puede utilizar para dibujar tablas en HTML.

Ejemplos

data.txt

[
   {
      "Name" : "Mahesh Parashar",
      "RollNo" : 101,
      "Percentage" : "80%"
   },
	
   {
      "Name" : "Dinkar Kad",
      "RollNo" : 201,
      "Percentage" : "70%"
   },
	
   {
      "Name" : "Robert",
      "RollNo" : 191,
      "Percentage" : "75%"
   },
	
   {
      "Name" : "Julian Joe",
      "RollNo" : 111,
      "Percentage" : "77%"
   }
]

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Includes</title>
      
      <style>
         table, th , td {
            border: 1px solid grey;
            border-collapse: collapse;
            padding: 5px;
         }
         
         table tr:nth-child(odd) {
            background-color: #f2f2f2;
         }
         
         table tr:nth-child(even) {
            background-color: #ffffff;
         }
      </style>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      <div ng-app = "" ng-controller = "studentController">
      
         <table>
            <tr>
               <th>Name</th>
               <th>Roll No</th>
               <th>Percentage</th>
            </tr>
         
            <tr ng-repeat = "student in students">
               <td>{{ student.Name }}</td>
               <td>{{ student.RollNo }}</td>
               <td>{{ student.Percentage }}</td>
            </tr>
         </table>
      </div>
      
      <script>
         function studentController($scope,$http) {
            var url = "data.txt";

            $http.get(url).then( function(response) {
               $scope.students = response.data;
            });
         }
      </script>
      
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js">
      </script>
      
   </body>
</html>

Salida

Para ejecutar este ejemplo, debe implementar testAngularJS.htm y el archivo data.txt en un servidor web. Abra el archivo testAngularJS.htm usando la URL de su servidor en un navegador web y vea el resultado.

AngularJS admite la aplicación de una sola página a través de múltiples vistas en una sola página. Para hacer esto, AngularJS ha proporcionado directivas ng-view y ng-template y servicios $ routeProvider.

ng-view

La etiqueta ng-view simplemente crea un marcador de posición donde se puede colocar una vista correspondiente (vista html o ng-template) según la configuración.

Uso

Defina un div con ng-view dentro del módulo principal.

<div ng-app = "mainApp">
   ...
   <div ng-view></div>

</div>

ng-template

La directiva ng-template se usa para crear una vista html usando una etiqueta de script. Contiene el atributo "id" que usa $ routeProvider para mapear una vista con un controlador.

Uso

Defina un bloque de script con el tipo como ng-template dentro del módulo principal.

<div ng-app = "mainApp">
   ...
	
   <script type = "text/ng-template" id = "addStudent.htm">
      <h2> Add Student </h2>
      {{message}}
   </script>

</div>

$ routeProvider

$ routeProvider es el servicio clave que establece la configuración de las URL, las asigna con la página html correspondiente o ng-template y adjunta un controlador con la misma.

Uso

Defina un bloque de script con el módulo principal y establezca la configuración de enrutamiento.

var mainApp = angular.module("mainApp", ['ngRoute']);

mainApp.config(['$routeProvider', function($routeProvider) {
   $routeProvider
   
   .when('/addStudent', {
      templateUrl: 'addStudent.htm', controller: 'AddStudentController'
   })
   
   .when('/viewStudents', {
      templateUrl: 'viewStudents.htm', controller: 'ViewStudentsController'
   })
   
   .otherwise ({
      redirectTo: '/addStudent'
   });
	
}]);

Los siguientes son los puntos importantes que se deben considerar en el ejemplo anterior.

  • $ routeProvider se define como una función en la configuración del módulo mainApp usando la clave como '$ routeProvider'.

  • $ routeProvider.when define una URL "/ addStudent" que luego se asigna a "addStudent.htm". addStudent.htm debe estar presente en la misma ruta que la página html principal. Si la página htm no está definida, entonces ng-template se utilizará con id = "addStudent.htm". Hemos utilizado ng-template.

  • "de lo contrario" se utiliza para establecer la vista predeterminada.

  • "controlador" se utiliza para establecer el controlador correspondiente para la vista.

Ejemplo

El siguiente ejemplo mostrará todas las directivas mencionadas anteriormente.

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Views</title>
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-route.min.js">
      </script>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      <div ng-app = "mainApp">
         <p><a href = "#addStudent">Add Student</a></p>
         <p><a href = "#viewStudents">View Students</a></p>
         <div ng-view></div>
         
         <script type = "text/ng-template" id = "addStudent.htm">
            <h2> Add Student </h2>
            {{message}}
         </script>
         
         <script type = "text/ng-template" id = "viewStudents.htm">
            <h2> View Students </h2>
            {{message}}
         </script>
      </div>
      
      <script>
         var mainApp = angular.module("mainApp", ['ngRoute']);
         mainApp.config(['$routeProvider', function($routeProvider) {
            $routeProvider
            
            .when('/addStudent', {
               templateUrl: 'addStudent.htm',
               controller: 'AddStudentController'
            })
            
            .when('/viewStudents', {
               templateUrl: 'viewStudents.htm',
               controller: 'ViewStudentsController'
            })
            
            .otherwise({
               redirectTo: '/addStudent'
            });
         }]);
         
         mainApp.controller('AddStudentController', function($scope) {
            $scope.message = "This page will be used to display add student form";
         });
         
         mainApp.controller('ViewStudentsController', function($scope) {
            $scope.message = "This page will be used to display all the students";
         });
      </script>
      
   </body>
</html>

Resultado

Abra textAngularJS.htm en un navegador web. Vea el resultado.

Scope es un objeto javascript especial que desempeña el papel de unir el controlador con las vistas. El alcance contiene los datos del modelo. En los controladores, se accede a los datos del modelo a través del objeto $ scope.

<script>
   var mainApp = angular.module("mainApp", []);
   
   mainApp.controller("shapeController", function($scope) {
      $scope.message = "In shape controller";
      $scope.type = "Shape";
   });
</script>

Los siguientes son los puntos importantes que se deben considerar en el ejemplo anterior.

  • $ scope se pasa como primer argumento al controlador durante su definición de constructor.

  • $ scope.message y $ scope.type son los modelos que se utilizarán en la página HTML.

  • Hemos establecido valores en modelos que se reflejarán en el módulo de aplicación cuyo controlador es shapeController.

  • Podemos definir funciones también en $ scope.

Herencia del alcance

Los alcances son específicos de los controladores. Si definimos controladores anidados, el controlador secundario heredará el alcance de su controlador principal.

<script>
   var mainApp = angular.module("mainApp", []);
   
   mainApp.controller("shapeController", function($scope) {
      $scope.message = "In shape controller";
      $scope.type = "Shape";
   });
   
   mainApp.controller("circleController", function($scope) {
      $scope.message = "In circle controller";
   });
	
</script>

Los siguientes son los puntos importantes que se deben considerar en el ejemplo anterior.

  • Hemos establecido valores para modelos en shapeController.

  • Hemos anulado el mensaje en el controlador secundario circleController. Cuando se utiliza "mensaje" dentro del módulo del controlador circleController, se utilizará el mensaje anulado.

Ejemplo

El siguiente ejemplo mostrará todas las directivas mencionadas anteriormente.

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Forms</title>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "mainApp" ng-controller = "shapeController">
         <p>{{message}} <br/> {{type}} </p>
         
         <div ng-controller = "circleController">
            <p>{{message}} <br/> {{type}} </p>
         </div>
         
         <div ng-controller = "squareController">
            <p>{{message}} <br/> {{type}} </p>
         </div>
			
      </div>
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.controller("shapeController", function($scope) {
            $scope.message = "In shape controller";
            $scope.type = "Shape";
         });
         
         mainApp.controller("circleController", function($scope) {
            $scope.message = "In circle controller";
         });
         
         mainApp.controller("squareController", function($scope) {
            $scope.message = "In square controller";
            $scope.type = "Square";
         });
			
      </script>
      
   </body>
</html>

Resultado

Abra textAngularJS.htm en un navegador web. Vea el resultado.

AngularJS admite los conceptos de "Separación de preocupaciones" mediante la arquitectura de servicios. Los servicios son funciones de JavaScript y son responsables de realizar tareas específicas únicamente. Esto los convierte en una entidad individual que se puede mantener y probar. Los controladores, los filtros pueden llamarlos según los requisitos. Los servicios normalmente se inyectan mediante el mecanismo de inyección de dependencia de AngularJS.

AngularJS proporciona muchos servicios incorporados, por ejemplo, $ https :, $ ruta, $ ventana, $ ubicación, etc. Cada servicio es responsable de una tarea específica, por ejemplo, $ https: se utiliza para realizar una llamada ajax para obtener los datos del servidor. $ route se utiliza para definir la información de enrutamiento y así sucesivamente. Los servicios incorporados siempre tienen el prefijo $ símbolo.

Hay dos formas de crear un servicio.

  • factory
  • service

Usando el método de fábrica

Usando el método de fábrica, primero definimos una fábrica y luego le asignamos un método.

var mainApp = angular.module("mainApp", []);
mainApp.factory('MathService', function() {
   var factory = {};
   
   factory.multiply = function(a, b) {
      return a * b
   }
   
   return factory;
});

Usando el método de servicio

Usando el método de servicio, definimos un servicio y luego le asignamos un método. También le hemos inyectado un servicio ya disponible.

mainApp.service('CalcService', function(MathService) {
   this.square = function(a) {
      return MathService.multiply(a,a);
   }
});

Ejemplo

El siguiente ejemplo mostrará todas las directivas mencionadas anteriormente.

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Services</title>
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "mainApp" ng-controller = "CalcController">
         <p>Enter a number: <input type = "number" ng-model = "number" /></p>
         <button ng-click = "square()">X<sup>2</sup></button>
         <p>Result: {{result}}</p>
      </div>
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.factory('MathService', function() {
            var factory = {};
            
            factory.multiply = function(a, b) {
               return a * b
            }
            return factory;
         });
         
         mainApp.service('CalcService', function(MathService) {
            this.square = function(a) {
               return MathService.multiply(a,a);
            }
         });
         
         mainApp.controller('CalcController', function($scope, CalcService) {
            $scope.square = function() {
               $scope.result = CalcService.square($scope.number);
            }
         });
      </script>
      
   </body>
</html>

Resultado

Abra textAngularJS.htm en un navegador web. Vea el resultado.

La inyección de dependencias es un patrón de diseño de software en el que a los componentes se les asignan sus dependencias en lugar de codificarlas dentro del componente. Esto evita que un componente localice la dependencia y hace que las dependencias sean configurables. Esto ayuda a que los componentes sean reutilizables, mantenibles y probables.

AngularJS proporciona un mecanismo de inyección de dependencia supremo. Proporciona los siguientes componentes principales que se pueden inyectar entre sí como dependencias.

  • value
  • factory
  • service
  • provider
  • constant

valor

value es un objeto javascript simple y se usa para pasar valores al controlador durante la fase de configuración.

//define a module
var mainApp = angular.module("mainApp", []);

//create a value object as "defaultInput" and pass it a data.
mainApp.value("defaultInput", 5);
...

//inject the value in the controller using its name "defaultInput"
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
   $scope.number = defaultInput;
   $scope.result = CalcService.square($scope.number);
   
   $scope.square = function() {
      $scope.result = CalcService.square($scope.number);
   }
});

fábrica

factory es una función que se utiliza para devolver valor. Crea valor bajo demanda siempre que un servicio o controlador lo requiera. Normalmente utiliza una función de fábrica para calcular y devolver el valor.

//define a module
var mainApp = angular.module("mainApp", []);

//create a factory "MathService" which provides a method multiply to return multiplication of two numbers
mainApp.factory('MathService', function() {
   var factory = {};
   
   factory.multiply = function(a, b) {
      return a * b
   }
   return factory;
}); 

//inject the factory "MathService" in a service to utilize the multiply method of factory.
mainApp.service('CalcService', function(MathService) {
   this.square = function(a) {
      return MathService.multiply(a,a);
   }
});
...

Servicio

service es un objeto javascript singleton que contiene un conjunto de funciones para realizar ciertas tareas. Los servicios se definen mediante las funciones service () y luego se inyectan en los controladores.

//define a module
var mainApp = angular.module("mainApp", []);
...

//create a service which defines a method square to return square of a number.
mainApp.service('CalcService', function(MathService) {
   this.square = function(a) {
      return MathService.multiply(a,a); 
   }
});

//inject the service "CalcService" into the controller
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
   $scope.number = defaultInput;
   $scope.result = CalcService.square($scope.number);
   
   $scope.square = function() {
      $scope.result = CalcService.square($scope.number);
   }
});

proveedor

AngularJS utiliza el proveedor internamente para crear servicios, fábrica, etc.durante la fase de configuración (fase durante la cual AngularJS se inicia). El siguiente script de mención se puede usar para crear MathService que hemos creado anteriormente. Provider es un método de fábrica especial con un método get () que se utiliza para devolver el valor / servicio / fábrica.

//define a module
var mainApp = angular.module("mainApp", []);
...

//create a service using provider which defines a method square to return square of a number.
mainApp.config(function($provide) {
   $provide.provider('MathService', function() {
      this.$get = function() {
         var factory = {};  
         
         factory.multiply = function(a, b) {
            return a * b; 
         }
         return factory;
      };
   });
});

constante

Las constantes se utilizan para pasar valores en la fase de configuración teniendo en cuenta el hecho de que el valor no se puede utilizar para pasar durante la fase de configuración.

mainApp.constant("configParam", "constant value");

Ejemplo

El siguiente ejemplo mostrará todas las directivas mencionadas anteriormente.

testAngularJS.htm

<html>
   <head>
      <title>AngularJS Dependency Injection</title>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "mainApp" ng-controller = "CalcController">
         <p>Enter a number: <input type = "number" ng-model = "number" /></p>
         <button ng-click = "square()">X<sup>2</sup></button>
         <p>Result: {{result}}</p>
      </div>
      
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.config(function($provide) {
            $provide.provider('MathService', function() {
               this.$get = function() {
                  var factory = {};
                  
                  factory.multiply = function(a, b) {
                     return a * b;
                  }
                  return factory;
               };
            });
         });
			
         mainApp.value("defaultInput", 5);
         
         mainApp.factory('MathService', function() {
            var factory = {};
            
            factory.multiply = function(a, b) {
               return a * b;
            }
            return factory;
         });
         
         mainApp.service('CalcService', function(MathService) {
            this.square = function(a) {
               return MathService.multiply(a,a);
            }
         });
         
         mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
            $scope.number = defaultInput;
            $scope.result = CalcService.square($scope.number);

            $scope.square = function() {
               $scope.result = CalcService.square($scope.number);
            }
         });
      </script>
      
   </body>
</html>

Resultado

Abra textAngularJS.htm en un navegador web. Vea el resultado.

Las directivas personalizadas se utilizan en AngularJS para ampliar la funcionalidad de HTML. Las directivas personalizadas se definen mediante la función "directiva". Una directiva personalizada simplemente reemplaza el elemento para el que está activada. La aplicación AngularJS durante el arranque encuentra los elementos coincidentes y realiza una actividad única usando su método compile () de la directiva personalizada y luego procesa el elemento usando el método link () de la directiva personalizada según el alcance de la directiva. AngularJS proporciona soporte para crear directivas personalizadas para el siguiente tipo de elementos.

  • Element directives - La directiva se activa cuando se encuentra un elemento coincidente.

  • Attribute - La directiva se activa cuando se encuentra un atributo coincidente.

  • CSS - La directiva se activa cuando se encuentra un estilo CSS coincidente.

  • Comment - La directiva se activa cuando se encuentra un comentario coincidente.

Comprensión de la directiva personalizada

Defina etiquetas html personalizadas.

<student name = "Mahesh"></student><br/>
<student name = "Piyush"></student>

Defina una directiva personalizada para manejar las etiquetas html personalizadas anteriores.

var mainApp = angular.module("mainApp", []);

//Create a directive, first parameter is the html element to be attached.	  
//We are attaching student html tag. 
//This directive will be activated as soon as any student element is encountered in html

mainApp.directive('student', function() {
   //define the directive object
   var directive = {};
   
   //restrict = E, signifies that directive is Element directive
   directive.restrict = 'E';
   
   //template replaces the complete element with its text. 
   directive.template = "Student: <b>{{student.name}}</b> , 
      Roll No: <b>{{student.rollno}}</b>";
   
   //scope is used to distinguish each student element based on criteria.
   directive.scope = {
      student : "=name"
   }
   
   //compile is called during application initialization. AngularJS calls 
      it once when html page is loaded.
	
   directive.compile = function(element, attributes) {
      element.css("border", "1px solid #cccccc");
      
      //linkFunction is linked with each element with scope to get the element specific data.
      var linkFunction = function($scope, element, attributes) {
         element.html("Student: <b>"+$scope.student.name +"</b> , 
            Roll No: <b>"+$scope.student.rollno+"</b><br/>");
         element.css("background-color", "#ff00ff");
      }
      return linkFunction;
   }
   
   return directive;
});

Defina controlador para actualizar el alcance de la directiva. Aquí estamos usando el valor del atributo de nombre como hijo del alcance.

mainApp.controller('StudentController', function($scope) {
   $scope.Mahesh = {};
   $scope.Mahesh.name = "Mahesh Parashar";
   $scope.Mahesh.rollno  = 1;
   
   $scope.Piyush = {};
   $scope.Piyush.name = "Piyush Parashar";
   $scope.Piyush.rollno  = 2;
});

Ejemplo

<html>
   <head>
      <title>Angular JS Custom Directives</title>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "mainApp" ng-controller = "StudentController">
         <student name = "Mahesh"></student><br/>
         <student name = "Piyush"></student>
      </div>
		
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.directive('student', function() {
            var directive = {};
            directive.restrict = 'E';
            directive.template = "Student: <b>{{student.name}}</b> , 
               Roll No: <b>{{student.rollno}}</b>";
            
            directive.scope = {
               student : "=name"
            }
            
            directive.compile = function(element, attributes) {
               element.css("border", "1px solid #cccccc");
               
               var linkFunction = function($scope, element, attributes) {
                  element.html("Student: <b>"+$scope.student.name +"</b> , 
                     Roll No: <b>"+$scope.student.rollno+"</b><br/>");
                  element.css("background-color", "#ff00ff");
               }
               return linkFunction;
            }
            
            return directive;
         });
         
         mainApp.controller('StudentController', function($scope) {
            $scope.Mahesh = {};
            $scope.Mahesh.name = "Mahesh Parashar";
            $scope.Mahesh.rollno  = 1;

            $scope.Piyush = {};
            $scope.Piyush.name = "Piyush Parashar";
            $scope.Piyush.rollno  = 2;
         });
      </script>
      
   </body>
</html>

Resultado

Abra textAngularJS.htm en un navegador web. Vea el resultado.

AngularJS admite la internacionalización incorporada para tres tipos de filtros de moneda, fecha y números. Solo necesitamos incorporar los js correspondientes según la configuración regional del país. De forma predeterminada, maneja la configuración regional del navegador. Por ejemplo, para usar la configuración regional danesa, use el siguiente script.

<script src = "https://code.angularjs.org/1.2.5/i18n/angular-locale_da-dk.js">
</script>

Ejemplo usando la configuración regional danesa

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Forms</title>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "mainApp" ng-controller = "StudentController">
         {{fees | currency }}  <br/><br/>
         {{admissiondate | date }}  <br/><br/>
         {{rollno | number }}
      </div>
		
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      <script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js">
      </script>
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.controller('StudentController', function($scope) {
            $scope.fees = 100;
            $scope.admissiondate  = new Date();
            $scope.rollno = 123.45;
         });
      </script>
      
   </body>
</html>

Resultado

Abra textAngularJS.htm en un navegador web. Vea el resultado.

Ejemplo usando la configuración regional del navegador

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Forms</title>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "mainApp" ng-controller = "StudentController">
         {{fees | currency }}  <br/><br/>
         {{admissiondate | date }}  <br/><br/>
         {{rollno | number }}
      </div>
		
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      <!-- <script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js">
      </script> -->
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.controller('StudentController', function($scope) {
            $scope.fees = 100;
            $scope.admissiondate  = new Date();
            $scope.rollno = 123.45;
         });
      </script>
      
   </body>
</html>

Resultado

Abra textAngularJS.htm en un navegador web. Vea el resultado.

AngularJS admite la internacionalización incorporada para tres tipos de filtros: moneda, fecha y números. Solo necesitamos incorporar el script java correspondiente según la configuración regional del país. De forma predeterminada, considera la configuración regional del navegador. Por ejemplo, para la configuración regional en danés, use la siguiente secuencia de comandos:

<script src = "https://code.angularjs.org/1.2.5/i18n/angular-locale_da-dk.js">
</script>

Ejemplo de uso de la configuración regional danesa

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Forms</title>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "mainApp" ng-controller = "StudentController">
         {{fees | currency }}  <br/><br/>
         {{admissiondate | date }}  <br/><br/>
         {{rollno | number }}
      </div>
		
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      <script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js">
      </script>
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.controller('StudentController', function($scope) {
            $scope.fees = 100;
            $scope.admissiondate  = new Date();
            $scope.rollno = 123.45;
         });
      </script>
      
   </body>
</html>

Salida

Abra el archivo testAngularJS.htm en un navegador web y vea el resultado.

Ejemplo de uso de la configuración regional del navegador

testAngularJS.htm

<html>
   <head>
      <title>Angular JS Forms</title>
   </head>
   
   <body>
      <h2>AngularJS Sample Application</h2>
      
      <div ng-app = "mainApp" ng-controller = "StudentController">
         {{fees | currency }}  <br/><br/>
         {{admissiondate | date }}  <br/><br/>
         {{rollno | number }}
      </div>
		
      <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
      </script>
      <!-- <script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js">
      </script> -->
      
      <script>
         var mainApp = angular.module("mainApp", []);
         
         mainApp.controller('StudentController', function($scope) {
            $scope.fees = 100;
            $scope.admissiondate  = new Date();
            $scope.rollno = 123.45;
         });
      </script>
      
   </body>
</html>

Salida

Abra el archivo testAngularJS.htm en un navegador web y vea el resultado.