Desenvolvimento

23 ago, 2018

Angular 6: Route Guards – Parte 02

Publicidade

Dando continuidade ao meu artigo anterior: Angular 6: Route Guards, hoje eu vou mostrar como utilizar o CanDeactivate.

O CanDeactivate deve ser utilizado nos cenários onde precisamos verificar se o usuário pode desativar uma rota (ir para uma outra rota). Imagine o seguinte exemplo: o seu usuário está preenchendo um formulário, e antes de salvar, ele tenta ir para uma outra rota; com o canDeactivate você pode interceptar e enviar uma mensagem para o seu usuário, solicitando que ele confirme se realmente deseja realizar essa operação.

Para os próximos passos eu irei utilizar o projeto iniciado no meu artigo anterior. Caso tenha interesse em clonar ele, segue o seu link no GitHub: Angular 6 Guards.

Abra esse projeto no seu editor de textos, em seguida execute o comando abaixo no seu terminal:

ng g s guards/productsdeactivate
ng g c products/product-edit

O passo anterior deve criar um serviço chamado ProductsdeactivateService e um componente chamado ProductEditComponent. Adicione esse novo componente nas suas rotas, em seguida abra o arquivo productsdeactivate.service.ts e atualize ele com o trecho de código abaixo:

import { Injectable } from '@angular/core';
import { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { ProductEditComponent } from '../products/product-edit/product-edit.component';

@Injectable({
  providedIn: 'root'
})
export class ProductsdeactivateService implements CanDeactivate<ProductEditComponent> {

  canDeactivate(
    component: ProductEditComponent,
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): boolean {
    console.log(route)
    return window.confirm("Tem certeza que deseja sair dessa página?");
  }
}

Não esqueça de adicionar esse serviço nos providers do ProductsModule.

providers: [ProductsdeactivateService]

Agora adicione o CandDeactivate na sua rota edit, conforme no trecho de código abaixo:

{ path: 'product-edit/:id', component: ProductEditComponent, canDeactivate: [ProductsdeactivateService] },

Em seguida, atualize o arquivo app.component.html com o seguinte trecho de código:

<button routerLink="/login">Login</button>
<button routerLink="/home">Home</button>
<button routerLink="/products">products</button>
<button routerLink="/products/product-edit/13">products-edit</button>

<router-outlet></router-outlet>

Testando

Para testar, execute o comando ng serve, e em seguida abra no seu navegador o endereço: http://localhost:4200/.

Abaixo você tem uma imagem demonstrando esse passo:

(canDeactivate)

Bem simples, né?

Dessa forma você consegue notificar o seu usuário antes que ele saia de uma determinada rota.

Bom, espero que tenham gostado e até um próximo artigo, pessoal!