Angular 2 - 
Cadastro de Clientes - XI
    
    
    ![]()  | 
    Neste artigo vou mostrar como criar um cadastro de clientes e fazer o CRUD usando o Angular 2 e o Visual Studio Code. | 
				
				![]()  | 
  
Continuando nossa aplicação angular 2, hoje vamos obter o id do cliente a partir da rota, passar o id para o serviço, que vai retornar os dados do respectivo cliente, e, assim podemos preencher a página de detalhes com os dados do cliente selecionado.
Para fazer isso vamos implementar a interface OnInit() e usar os componentes ActivatedRoute e Params do Router do Angular para poder extrair o parâmetro da rota.
A interface OnInit() faz parte do ciclo de vida e é chamada depois que as propriedades de uma diretiva vinculada a dados são inicializadas.
O ActivatedRoute contém as informações sobre uma rota associada a um componente carregado em um outlet. Um ActivatedRoute também pode ser usado para percorrer a árvore de estado do roteador.
O Params retorna um Observable (O objeto Observable representa uma coleção baseada em push) que contém os parâmetros da nossa rota.
Estamos importando também o Location que é um serviço que a aplicação pode usar para interagir com a URL do navegador. (Vamos usar isso mais adiante)
Vamos abrir o arquivo cliente-detalhe.component.ts e alterar o seu código incluindo as linhas em azul como mostrado abaixo:
		import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Params} from '@angular/router';
import { Location } from '@angular/common';
		import { Cliente } from './cliente.model';
import { ClienteService } from './cliente.service';
		@Component({
    moduleId: module.id,
    selector : 'cliente-detalhe',
    templateUrl : 'cliente-detalhe.component.html'
})
export class ClienteDetalheComponent implements OnInit  {
		      cliente : Cliente;
		      constructor(
         private clienteService : ClienteService,
         private route : ActivatedRoute,
         private location : Location
      ) {}
		       ngOnInit(): void {
           this.route.params.forEach((params: Params)=>{
               let id: number = +params['id'];
		          if(id) {
                  this.clienteService.getCliente(id)
                     .then((cliente: Cliente)=> {
                       console.log(cliente);
                       this.cliente = cliente;
                  });
               }
     });
    }
}
		 | 
	
Neste código importamos os componentes ActivatedRoute, Params, Location e o ciclo de vida OnInit para implementarmos a sua interface (implements OnInit) na classe ClienteDetalheComponent. Importamos também as classes Cliente e ClienteService.
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Params} from '@angular/router';
import { Location } from '@angular/common';
import { Cliente } from './cliente.model';
import { ClienteService } from './cliente.service';
No construtor da classe, usamos o sistema de injeção de dependência do Angular2 para injetar as dependências que vamos usar neste componente: ClienteService, ActivatedRoute e Location.
Nota: A Injeção de dependência é o mecanismo utilizado para prover instâncias de serviços e componentes para outros serviços e componentes.
 constructor(
         private clienteService : 
ClienteService,
         private route : ActivatedRoute,
         private location : Location
      ) {}
No método NgOnInit usamos os componentes para extrair o id da rota:
 ngOnInit(): void {
           this.cliente = new Cliente(0,'','','',);
           this.route.params.forEach((params: Params)=>{
               let id: number = +params['id'];
           if(id) {    
                this.clienteService.getCliente(id)
                  .then((cliente: Cliente)=> {
                       console.log(cliente);
                       this.cliente = cliente;
                 });
            }
Obs: a linha de código this.cliente = new Cliente(0,'','','') apenas cria uma instância de um objeto cliente, que embora, esteja sem dados , agora esta inicializado. Isso é necessário pois o método GetCliente() vai retornar uma Promise e assim o componente vai ser atualizado antes do retorno do servidor.
Percorremos a coleção de parâmetros usando um forEach e extraimos o parâmetro 'id' atribuindo-o à variável id do tipo número: let id: number = +params['id'];
Nota: o sinal de (+) na frente de params['id']; é para converter o valor obtido de string para número.
Depois, vamos passar o valor do id obtido para um método chamado getCliente(id), que ainda vamos criar, e que vai retornar os dados do cliente com o id especificado.
Mas observe que antes de chamar o método getCliente() verificamos se o id é válido ( if(id) ) , ou seja, se ele for undefined não faremos a chamada.
O método getCliente() deve ser criado no arquivo cliente.service.ts conforme mostra o código em azul a seguir:
		import { Injectable } from '@angular/core';
		import { Cliente } from './cliente.model';
import { CLIENTES } from './clientes-mock';
		@Injectable()
export class ClienteService{
    getClientes() : Promise<Cliente[]> {
       return Promise.resolve(CLIENTES);        
      }
		    getCliente(id:number): Promise<Cliente> {
           return this.getClientes()
           .then((clientes: Cliente[]) => clientes.find(cliente => cliente.id === id)); 
          }
		}
		 | 
	
Este método recebe o id e retorna uma Promise de um único objeto Cliente a partir do array de clientes (Cliente[]) onde ele localiza(find) no array o cliente com o id passado para o método:
(clientes: Cliente[]) => clientes.find(cliente => cliente.id === id));
Nota: Segundo a especificação do ECMAScript, o triplo === significa "igualdade estrita", ou seja, somente retorna true se os operandos forem do mesmo tipo e valor.
Assim, já estamos retornando os dados do objeto selecionado e podemos ver isso no console da aplicação.
Executando a aplicação e selecionando alguns clientes iremos ter o seguinte resultado:

Agora só falta preencher o formulário com os dados do objeto que já esta sendo obtido a partir do id extraido da rota para o cliente selecionado.
Faremos isso no próximo artigo usando o DataBinding.
Jesus dizia, pois, aos judeus que criam 
nele: Se vós permanecerdes na minha palavra, verdadeiramente sereis meus 
discípulos;
E conhecereis a verdade, e a verdade vos libertará.
João 8:31,32
| 
    
    Veja os 
    Destaques e novidades do SUPER DVD Visual Basic 
(sempre atualizado) : clique e confira ! 
 Quer migrar para o VB .NET ? 
 Quer aprender C# ?? 
 Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?  | 
  
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a 
Objetos com VB .NET
![]()
NET - Criando um livro de contatos usando o AngularJS - Macoratti
NET - AngularJS : Apresentação (início do curso) - Macoratti
ASP .NET MVC - Crud com Entity Framework e AngularJS - Macoratti
AngularJS - Conceitos Básicos - YouTube (série de 13 vídeo aulas sobre o Angular)
NET - O que é TypeScript e quais os seus benefícios - Macoratti
TypeScript - Configurando o VS Community 2015 para ... - Macoratti
Visual Studio - Bem-Vindo Node.js : desenvolvendo para Node.js na plataforma .NET