Nós já podemos testar algumas das funcionalidades que irão vir com a versão v5 do Angular. Para esse artigo nós iremos partir de um projeto com o Angular na versão stable, iremos baixar ele do GitHub e atualizaremos ele para versão (5.0.0-rc.1). No final desse artigo nós teremos a animação abaixo:

Startup
Nosso primeiro passo será baixarmos o projeto. Para isso, escolha um diretório no seu computador e execute o comando abaixo na sua console:
git clone <a href="https://github.com/programadriano/angular-animations.git">https://github.com/programadriano/angular-animations.git</a>
Com o projeto clonado, navegue até ele via CMD e execute o comando npm i, esse comando irá baixar as dependências necessárias para nossa aplicação.
Para o nosso próximo passo precisaremos de uma IDE, para esse artigo iremos utilizar o Visual Studio Code. Abra ele e navegue até o projeto que acabamos de clonar.
Upgrade da versão do Angular
As animações increment e decrement, são algumas das novidades que virão com a nova versão do Angular v5, caso você tente executar os exemplos desse artigo na versão stable, irá receber o erro abaixo na sua console.

Com o nosso projeto aberto no VS Code, vamos atualizar as nossas referências. Para isso, abra o seu arquivo package.json e atualize ele com as as seguintes referências.
{ "name": "angular-animations", "version": "0.0.0", "license": "MIT", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e" }, "private": true, "dependencies": { "@angular/animations": "^5.0.0-rc.1", "@angular/common": "^5.0.0-rc.1", "@angular/compiler": "^5.0.0-rc.1", "@angular/core": "^5.0.0-rc.1", "@angular/forms": "^5.0.0-rc.1", "@angular/http": "^5.0.0-rc.1", "@angular/platform-browser": "^5.0.0-rc.1", "@angular/platform-browser-dynamic": "^5.0.0-rc.1", "@angular/router": "^5.0.0-rc.1", "core-js": "^2.4.1", "rxjs": "^5.4.2", "web-animations-js": "^2.3.1", "zone.js": "^0.8.14" }, "devDependencies": { "@angular/cli": "^1.5.0-beta.4", "@angular/compiler-cli": "^5.0.0-rc.1", "@angular/language-service": "^5.0.0-rc.1", "typescript": "~2.4.1", "@types/jasmine": "~2.5.53", "@types/jasminewd2": "~2.0.2", "@types/node": "~6.0.60", "codelyzer": "~3.2.0", "jasmine-core": "~2.6.2", "jasmine-spec-reporter": "~4.1.0", "karma": "~1.7.0", "karma-chrome-launcher": "~2.1.1", "karma-cli": "~1.0.1", "karma-coverage-istanbul-reporter": "^1.2.1", "karma-jasmine": "~1.1.0", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "~5.1.2", "ts-node": "~3.2.0", "tslint": "~5.7.0" } }
Criando animação
Agora que estamos com o nosso projeto atualizado, vamos criar o código necessário para nossa animação. Para que possamos organizar o nosso código, crie um novo componente com o nome exemplo01. Para isso, execute o comando abaixo para que possamos criar um novo componente:
ng g c components/exemplo01
Agora atualize os arquivos: exemplo-animation.component.ts e exemplo-animation.component.html conforme demonstrado abaixo.
exemplo-animation.component.ts
import { Component, OnInit } from '@angular/core'; import { trigger, transition, group, query, style, animate } from "@angular/animations"; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/observable/interval'; @Component({ selector: 'app-exemplo-animation', templateUrl: './exemplo-animation.component.html', styleUrls: ['./exemplo-animation.component.css'], animations: [ trigger('valueAnimation', [ transition(':increment', group([ query(':enter', [ style({ color: 'blue', fontSize: '50px' }), animate('0.8s ease-out', style('*')) ]) ])), transition(':decrement', group([ query(':enter', [ style({ color: 'red', fontSize: '50px' }), animate('0.8s ease-out', style('*')) ]) ])) ]) ] }) export class ExemploAnimationComponent implements OnInit { constructor() { } allNumbers: number[] = [1, 2]; selectedIndex = 0; get banners() { return [this.allNumbers[this.selectedIndex]]; } ngOnInit() { let x = 0; Observable.interval(2000) .subscribe(() => { x % 2 === 0 ? this.selectedIndex++ : this.selectedIndex--; x++; }); } }
exemplo-animation.component.html
<section [@valueAnimation]="selectedIndex"> <div class="changingValue" *ngFor="let num of banners"> {{ num }} </div> </section>
Vamos entender os exemplos a cima, começando pelo nosso ExemploAnimationComponent:
Dentro de animations nós temos:
- valueAnimation: trigger que iremos utilizar nossa animação.
- transtions: increment: com a cor azul e a font-size de 50px e decrement: com a cor vermelha e a font-size de 50px;
Em seguida nós criamos um array com dois valores, para nossa animação, depois nós temos:
- Um método chamado banners retornando um dos valores do nosso array pelo seu index.
- No nosso ngOnInit, nós utilizamos o obervable para que de dois em dois segundos altere o valor da nossa variável selectedIndex.
Por fim, passamos via property bind o valor da nossa trigger para o nosso HTML e executamos o ngFor no retorno do nosso método banners.
Para que possamos testar o nosso código execute o comando ng serve e abra a seguinte URL no seu navegador: http://localhost:4200/.
Esse artigo foi inspirado em um dos artigos escritos pelo Eliran Elnasi.