Angular 2 es la nueva versión de AngularJS. Esta nueva versión es completamente diferente a Angular 1.
Veamos los cambios entre AngularJS y Angular2.
Controladores y Componentes
En Angular 1:
<body ng-controller="PeliculasController as peli"> <h3>{{peli.data.titulo}}</h3> <h3 ng-bind="peli.data.titulo"></h3> </body> <script type="text/javascript"> (function (){ angular .module('app') .controller('PeliculasController', PeliculasController); function PeliculasController() { var peli = this; peli.data= { id: 45, titulo: 'Una historia real' }; } })(); </script>
En Angular 2
import { Component } from 'angular2/core'; @Component({ selector: 'pelicula', template: '<h2>{{pelicula.titulo}}</h2>' }) export class PeliculaComponent { public pelicula = { id: 45, titulo: 'Una historia real' }; }
Bootstrapping
En Angular 1:
<html ng-app="app">
En Angular 2:
import { bootstrap } from 'angular2/platform/browser'; import { AppComponent } from './app.component'; bootstrap(AppComponent);
Directivas
En Angular 1:
<ul> <li ng-repeat="peli in peliculas.data"> {{peli.titulo}} </li> </ul>
En Angular 2:
<ul> <li *ngFor="#peli of peliculas"> {{peli.titulo}} </li> </ul>
Data Binding
En Angular 1:
<!-- interpolación --> <h4>{{peliculas.data.titulo}}</h4> <!-- one way binding --> <h4 ng-bind="peliculas.data.titulo"></h4> <!-- two way binding --> <input ng-model="peliculas.data.titulo"> <!-- eventos --> <button ng-click="peliculas.log('click')" ng-blur="peliculas.log('blur')"> Aceptar </button>
En Angular 2:
<!-- interpolacion --> <h4>{{pelicula.titulo}}</h4> <!-- one way binding --> <h4 [innerText]="pelicula.titulo"></h4> <!-- two way binding --> <input [(ngModel)]="pelicula.titulo"> <!-- eventos --> <button (click)="log('click')" (blur)="log('blur')">Aceptar</button>
Servicios
En Angular 1, había muchas formas de crear servicios, en Angular 2, sólo hay una forma y es definiendo una clase Injectable.
En Angular 1:
angular .module('app') .service('PeliculasService', PeliculasService); function PeliculasService() { this.getPeliculas = function () { return [ { id: 1, titulo: 'Peli 1' }, { id: 2, titulo: 'Peli 2' }, { id: 3, titulo: 'Peli 3' } ]; }; }
En Angular 2:
import { Injectable } from 'angular2/core'; @Injectable() export class PeliculasService { public getPeliculas = () => [ { id: 1, titulo: 'Peli 1' }, { id: 2, titulo: 'Peli 2' }, { id: 3, titulo: 'Peli 3' } ]; }
Inyección de dependencias
En Angular 1:
angular .module('app') .controller('PeliculasController', PeliculasController); PeliculasController.$inject = ['PeliculasService']; function PeliculasController(PeliculasService) { var peliculas = this; peliculas.data = PeliculasService.getPeliculas(); }
En Angular 2:
import { PeliculasService } from './peliculas.service'; @Component({ selector: 'peliculas', templateUrl: 'app/peliculas.component.html', providers: [PeliculasService] }) export class PeliculasComponent { constructor(private _peliculasService: PeliculasService) {} public peliculas = this._peliculasService.getPeliculas(); }
En definitiva hemos visto las principales diferencias a nivel de código y que AngularJS no tiene prácticamente nada que ver con Angular 2.