Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
@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.
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;
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
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 gerenciamento de estado pode ser feito de várias maneiras diferentes em Angular, incluindo serviços, observáveis e ferramentas
dedicadas, como o NgRx.
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;
}
}
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, 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';
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.
Em Angular, podemos escrever testes para componentes, serviços, diretivas e outros recursos para garantir que eles estejam
funcionando conforme o esperado.
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');
});
});
@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.
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
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.
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
Testes de Integração
Testes Unitários
Testes E2E
Jasmine
Protractor
NgRx
Usando observables
Usando serviços
Usando NgRx
Jasmine
Karma
Protractor
Enviar
Conclusão