Você está na página 1de 10

Hooray! Course created successfully.

Desenvolvimento Angular Avançado


Aprenda a criar aplicações web mais complexas com o framework Angular.

Iniciar

Visão geral
Este curso de Desenvolvimento Angular Avançado é projetado para desenvolvedores que já possuem conhecimento prévio em Angular
e desejam aprimorar suas habilidades para criar aplicativos da web mais complexos. O curso abrange temas como roteamento
avançado, gerenciamento de estado, testes unitários e integração com APIs externas. Os participantes também aprenderão boas
práticas de desenvolvimento, incluindo estruturação de projetos e uso de bibliotecas de terceiros.

01 Roteamento

Roteamento Avançado

01 Roteamento Avançado
Sign up

Neste módulo, você aprenderá como criar rotas avançadas em sua aplicação Angular para melhorar a experiência do usuário e
gerenciar seu aplicativo de forma mais eficiente. Create

O que é roteamento em Angular? Share

Em termos simples, o roteamento é a capacidade de navegar entre diferentes páginas em sua aplicação Angular. Ao contrário das
Download
aplicações single-page, onde todo o conteúdo é carregado em uma única página, o roteamento permite que os desenvolvedores
dividam o conteúdo em várias páginas separadas e vinculem essas páginas uns aos outros usando URLs exclusivas. Made with
O roteamento em Angular é baseado no conceito de componentes. Cada rota é representada por um componente que é carregado
dinamicamente quando o usuário navega para essa rota específica. Isso significa que a inicialização de cada componente será feita
somente quando requisitado, melhorando a velocidade da aplicação e reduzindo a quantidade de recursos necessários.

Criando rotas em Angular


Para criar rotas em Angular, precisamos importar o módulo de roteamento e configurar as rotas em nosso aplicativo. Aqui está um
exemplo simples:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home.component';
import { AboutComponent } from './about.component';

const routes: Routes = [


{ path: '', component: HomeComponent },
{ path: 'about', component: AboutComponent }
];

@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }

Neste exemplo, estamos criando duas rotas: uma para a página inicial, que usa o componente HomeComponent, e outra para a página
"Sobre nós", que usa o componente AboutComponent. A rota raiz vazia indica a página inicial.

Roteamento Avançado
Agora que entendemos como criar rotas em Angular, podemos começar a explorar recursos mais avançados.

Rotas com parâmetros

Uma rota pode ter um ou mais parâmetros. Isso é útil quando precisamos passar informações de uma página para outra. Os
parâmetros são adicionados na URL da seguinte forma:
const routes: Routes = [
{ path: 'produto/:id', component: ProductComponent }
];

Podemos acessar esses parâmetros dentro do nosso componente usando a classe ActivatedRoute, que nos permite obter
informações sobre a rota atual. Por exemplo:
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

@Component({
selector: 'app-product',
template: '<h1>Detalhes do Produto {{ id }}</h1>'
})
export class ProductComponent implements OnInit {
id!: string;

constructor(private route: ActivatedRoute) {}

ngOnInit() {
this.id = this.route.snapshot.params['id'];
}
}

Rotas aninhadas

As rotas aninhadas são usadas quando queremos exibir conteúdo diferente dentro de uma página, dependendo da rota atual. Por
exemplo, imagine que temos uma página de produtos com várias subpáginas, como detalhes do produto ou avaliações dos clientes.
Podemos criar rotas aninhadas para lidar com essas subpáginas da seguinte forma:
const routes: Routes = [
{ path: 'produtos', component: ProductsComponent,
children: [
{ path: '', redirectTo: 'detalhes', pathMatch: 'full' },
{ path: 'detalhes', component: ProductDetailsComponent },
{ path: 'avaliacoes', component: ProductReviewsComponent }
]
}
];

Lazy Loading

Lazy loading é uma técnica de carregamento sob demanda, que permite carregar os módulos da sua aplicação à medida que são
necessários, em vez de carregá-los todos de uma vez.

Para usar o carregamento tardio, basta adicionar loadChildren à nossa configuração de rota:
const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'produtos', loadChildren: () => import('./products/products.module').then(m => m.ProductsModule) }
];

Isso instrui o Angular a carregar dinamicamente o módulo ProductsModule quando o usuário navegar para a rota /produtos.

Conclus

Conclusão - Roteamento Avançado

O roteamento avançado é uma técnica eficiente para permitir que os usuários naveguem em
diferentes páginas de um aplicativo Angular. Usando parâmetros de roteamento, podemos
passar informações entre as páginas e criar uma experiência de usuário mais completa e
personalizada.

Gerenciamento de Estado
02 Gerenciamento de Estado

Neste módulo, você aprenderá como gerenciar o estado de sua aplicação Angular com mais eficiência, usando técnicas e bibliotecas
avançadas.

O que é gerenciamento de estado?


Gerenciamento de estado refere-se à forma como uma aplicação lida com dados e informações em tempo real. Na maioria dos casos,
os dados são armazenados em algum lugar na memória do navegador e precisamos garantir que todas as partes do aplicativo sejam
atualizadas quando esses dados mudam.

O gerenciamento de estado pode ser feito de várias maneiras diferentes em Angular, incluindo serviços, observáveis e ferramentas
dedicadas, como o NgRx.

Usando serviços para gerenciamento de estado


Serviços são uma das maneiras mais simples de gerenciar o estado em uma aplicação Angular. Eles podem ser injetados em qualquer
componente ou diretiva e usados ​para compartilhar dados entre diferentes partes do aplicativo.

Por exemplo, podemos criar um serviço chamado UserService para gerenciar informações de usuário em nosso aplicativo. O
serviço teria métodos para recuperar e atualizar informações de usuário, além de um atributo para armazenar o estado atual.
import { Injectable } from '@angular/core';

@Injectable({
providedIn: 'root'
})
export class UserService {
private user = {};

getUser() {
return this.user;
}

setUser(newUser) {
this.user = newUser;
}
}

Observables para gerenciamento de estado


Os observáveis são outra técnica comum de gerenciamento de estado em Angular. Observáveis são objetos que emitem notificações
sempre que ocorrem mudanças em seu valor.

Podemos usar observáveis para gerenciar o estado de componentes, permitindo que eles respondam a mudanças em tempo real. Por
exemplo, podemos criar um serviço chamado DataService que emite uma notificação sempre que os dados são atualizados.
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';

@Injectable({
providedIn: 'root'
})
export class DataService {
private data = new BehaviorSubject([]);

setData(newData) {
this.data.next(newData);
}

getData() {
return this.data.asObservable();
}
}

Usando NgRx para gerenciamento de estado


NgRx é uma biblioteca popular para gerenciamento de estado em Angular. Ele fornece recursos avançados, como armazenamento
centralizado, rastreamento de ações e facilidade de teste.

Usando NgRx, podemos definir um store para nosso aplicativo, que funciona como uma fonte única de verdade para todos os dados
do aplicativo. Também podemos definir reducers para manipular as ações e alterar o estado do aplicativo.

Por exemplo, podemos criar um store para gerenciar informações de usuário, com um reducer para tratar as ações de login e logout.
import { createReducer, on } from '@ngrx/store';
import { login, logout } from './user.actions';

export interface UserState {


loggedIn: boolean;
user: any;
}

export const initialState: UserState = {


loggedIn: false,
user: {}
};

export const userReducer = createReducer(


initialState,
on(login, (state, { user }) => ({
loggedIn: true,
user
})),
on(logout, state => ({
loggedIn: false,
user: {}
}))
);

Conclusão - Gerenciamento de Estado

O gerenciamento de estado é uma parte essencial do desenvolvimento de aplicativos Angular.


O uso da biblioteca NgRx facilita a manipulação do estado de vários componentes e ajuda na
criação de um aplicativo mais coeso e escalável.
Testes e Integração

03 Testes e Integração

Neste módulo, você aprenderá como testar sua aplicação Angular de forma mais abrangente e integrar seu aplicativo com APIs
externas.

Por que fazer testes em Angular?


Testes são uma parte essencial do processo de desenvolvimento de qualquer aplicativo. Eles nos permitem verificar se nossos
recursos estão funcionando corretamente antes de serem implantados em produção e garantem que as mudanças futuras não
interrompam o funcionamento do aplicativo.

Em Angular, podemos escrever testes para componentes, serviços, diretivas e outros recursos para garantir que eles estejam
funcionando conforme o esperado.

Testes Unitários em Angular


Os testes unitários são usados ​para testar partes individuais do código, como componentes ou serviços. Os testes unitários são
escritos em TypeScript, usando a biblioteca de teste Jasmine.

Podemos usar o método describe para agrupar vários testes relacionados, seguidos pelo método it para definir um teste
específico.

Por exemplo, podemos escrever um teste para nosso componente ProductComponent, verificando se ele está exibindo os detalhes
corretos do produto.
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ProductComponent } from './product.component';

describe('ProductComponent', () => {
let component: ProductComponent;
let fixture: ComponentFixture<ProductComponent>;

beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ProductComponent ]
})
.compileComponents();
});

beforeEach(() => {
fixture = TestBed.createComponent(ProductComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should display product details', () => {
component.product = {
name: 'Product Test',
price: 9.99
};
fixture.detectChanges();
const compiled = fixture.nativeElement;
expect(compiled.querySelector('h1').textContent).toContain('Product Test');
expect(compiled.querySelector('.price').textContent).toContain('$9.99');
});
});

Integração de APIs externas em Angular


A integração com APIs externas é uma parte essencial da maioria dos aplicativos web modernos. Em Angular, podemos usar os
módulos HttpClient e Http para fazer chamadas HTTP para nossos endpoints.

Podemos usar o método get para recuperar dados da nossa API:


import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
providedIn: 'root'
})
export class ProductService {
constructor(private http: HttpClient) {}

getAllProducts() {
return this.http.get('/api/products');
}

getProductById(id: number) {
return this.http.get(`/api/products/${id}`);
}
}

Com o método get, simplesmente passamos a URL da nossa API e recebemos uma resposta contendo nossos dados. Podemos
então manipular esses dados como desejarmos em nosso aplicativo.

Testes End-to-End em Angular


Os testes end-to-end (E2E) são usados ​para testar as partes integradas do aplicativo, verificando se tudo está funcionando
corretamente como um todo. Em Angular, podemos escrever testes E2E usando a biblioteca Protractor.

Por exemplo, podemos escrever um teste para garantir que o processo de login esteja funcionando corretamente em nossa aplicação:
describe('Login Process', () => {
it('should log in successfully', () => {
browser.get('/login');
element(by.css('input[name="username"]')).sendKeys('user');
element(by.css('input[name="password"]')).sendKeys('password');
element(by.css('button[type="submit"]')).click();
expect(browser.getCurrentUrl()).toContain('/dashboard');
});
});

Este teste simula o processo de login na nossa aplicação, preenchendo os campos de nome de usuário e senha e clicando no botão de
login. Ele então verifica se a URL atual corresponde à página do painel.
Conclusão - Testes e Integração

Testes e integração são partes cruciais para garantir a qualidade e confiabilidade de um


aplicativo Angular. A escrita de testes unitários e E2E pode ajudar a identificar problemas
precocemente e garantir que o comportamento do aplicativo seja consistente e correto. A
integração com APIs externas também é importante para fornecer informações atualizadas
aos usuários e garantir uma experiência de usuário mais rica.

Exercícios Práticos
Vamos colocar seus conhecimentos em prática

04 Exercícios Práticos

Nesta lição, colocaremos a teoria em prática por meio de atividades práticas. Clique nos itens abaixo para conferir cada exercício e
desenvolver habilidades práticas que o ajudarão a ter sucesso na disciplina.

Exercício #1 - Roteamento com Parâmetros

Exercício #2 - Gerenciando estado com NgRx

Exercício #3 - Testes E2E

Resumo
Vamos revisar o que acabamos de ver até agora

05 Resumo

O roteamento avançado é uma técnica eficiente para permitir que os usuários naveguem em diferentes páginas de um aplicativo
Angular. Usando parâmetros de roteamento, podemos passar informações entre as páginas e criar uma experiência de usuário
mais completa e personalizada.

O gerenciamento de estado é uma parte essencial do desenvolvimento de aplicativos Angular. O uso da biblioteca NgRx facilita a
manipulação do estado de vários componentes e ajuda na criação de um aplicativo mais coeso e escalável.

Testes e integração são partes cruciais para garantir a qualidade e confiabilidade de um aplicativo Angular. A escrita de testes
unitários e E2E pode ajudar a identificar problemas precocemente e garantir que o comportamento do aplicativo seja
consistente e correto. A integração com APIs externas também é importante para fornecer informações atualizadas aos
usuários e garantir uma experiência de usuário mais rica.

Questionário
Verifique seu conhecimento respondendo a algumas perguntas

06 Questionário

1. Qual é a principal razão para escrever testes em uma aplicação Angular?

Para melhorar a velocidade do aplicativo

Para garantir que o comportamento do aplicativo seja consistente e correto

Para garantir que nosso código está livre de erros de sintaxe

2. Como podemos integrar nossa aplicação Angular com APIs externas?

Usando o método 'fetch'

Usando o módulo HttpInterceptor

Usando o módulo HttpClient


3. Qual é a técnica usada para testar partes individuais do código, como componentes ou serviços?

Testes de Integração

Testes Unitários

Testes E2E

4. Qual é a biblioteca usada para gerenciamento de estado em Angular?

Jasmine

Protractor

NgRx

5. Qual é a melhor técnica para gerenciar o estado de um componente em Angular?

Usando observables

Usando serviços

Usando NgRx

6. Qual é a biblioteca usada para escrever testes E2E em Angular?

Jasmine

Karma

Protractor

Enviar

Conclusão

Complete o questionário para desbloquear este módulo

Created with CourseAI


v0.1.33

Você também pode gostar