Trabalhando com angular-cli.
Angular é uma plataforma de aplicações web de código-fonte aberto e front-end baseado em TypeScript liderado pela Equipe Angular do Google e por uma comunidade de indivíduos e corporações. Angular é uma reescrita completa do AngularJS, feito pela mesma equipe que o construiu.
–Wiki
Pre-requisitos:
Entre no diretório do projeto para começar a trabalhar nele:
O comando abaixo irá fazer o build da aplicação e rodar no http://localhost:4200/, você poderá acompanhar pelo browser o efeito das alterações do projeto.
ou abreviado:
Angular 2 é orientado a componentes, isso significa que você vai escrever diversos componentes minúsculos que juntos constituirão uma aplicação inteira. Um Component é a combinação de um template HTML com uma classe que controla parte da tela.
–Matera
É possível criar os componentes manualmente ou de forma mais simplificada, utilizando o angular-cli
.
Os arquivos de componentes estão em: src >>> app
Basta digitar no terminal:
ou se já existir o diretório:
onde:
Esse comando irá criar a pasta do component e os arquivos.
Neste caso, ele também irá criar o arquivo html onde você deverá editar o conteúdo do seu component. É uma forma diferente da demonstrada no modo manual com template string, ambas as formas podem ser utizadas (template string, html separado).
No arquivo nome-do-componente.component.ts, gerado na criação do componente, haverá o seletor que você poderá usar no HTML, por exemplo:
No arquivo btn.component.ts:
O seletor app-btn, poderá ser usado no html como:
!Nota: se o component estiver importado no app.module.ts que é o module raíz do projeto, você também poderá utilizar o component dentro dos arquivos html de outros components.
!Convenção: Criar nome das pastas e dos arquivos de componentes em Kebab Case (com letra minúscula e palavras separadas por "-")
!Convenção: classes são escritas em Pascal Case (todas as primeiras letras em maiúsculo)
Projeção de conteúdo:
html = template
!Boa prática: no Component -> Utilizar template string somente se tiver até 3 linhas. Mais do que isso é recomendado um arquivo HTML a parte.
Podemos usar a interpolação para atribuir valores em um componente.
Por exemplo:
no arquivo exemplo.component.ts
Depois de ter feito todos as configurações necessárias no arquivo de modules.
Podemos utilizar a interpolação no arquivo exemplo.component.html
Inserindo o componente para exibição, o resultado será:
Olá, meu nome é Lays
Em Angular, um módulo é um mecanismo para agrupar componentes, diretivas, canais e serviços relacionados, de forma que possam ser combinados com outros módulos para criar uma aplicação. Uma aplicação Angular pode ser vista como um quebra-cabeça onde cada peça (ou cada módulo) é necessária para poder ver a imagem completa.
Outra analogia para entender os módulos angulares são as classes. Em uma classe, podemos definir métodos públicos ou privados. Os métodos públicos são a API que outras partes do nosso código podem usar para interagir com ela, enquanto os métodos privados são detalhes de implementação ocultos. Da mesma forma, um módulo pode exportar ou ocultar componentes, diretivas, tubulações e serviços. Os elementos exportados devem ser usados por outros módulos, enquanto os que não são exportados (ocultos) são usados apenas dentro do próprio módulo e não podem ser acessados diretamente por outros módulos de nosso aplicativo. –Angular 2 training book
O angular-cli cria automaticamente um arquivo app.modules.ts:
(esse é o módulo raiz do projeto)
(esse é um módulo de funcionalidade do projeto)
Na pasta do projeto, digite no terminal:
Ex:
irá criar um diretório com o nome do módulo (ex: my-module), com o arquivo .ts correspondente ao módulo criado:
ver como criar componentes
O angular-cli cuida dos imports dos componentes que são criados e das declarações, acrescentando-os no app.module.ts.
Se você tiver a extensão Auto Import, ela irá acrescentar os imports necessários dos componentes no arquivo de módulo, porém é necessário acrescentar o trecho de export para indicar o que deve ser efetivamente exportado e exibido.
Assim, nosso arquivo de exemplo fica assim:
!Dica: Importar módulo -> Sempre que estiver trabalhando com mais módulo além do módulo app.module.ts, será necessário exportar este módulo em seu arquivo e importar no arquivo raíz.
Depois disso será necessário importar o módulo de funcionalidade dentro do módulo raíz (app.module.ts).
Exemplo:
no arquivo app.module.ts:
Importar a classe:
Em seguida, importar o módulo no NgModule:
Também é possível fazer uso de componentes privados, não incluindo-os no imports.
!Nota: se o component estiver importado no app.module.ts que é o module raíz do projeto, você também poderá utilizar o component dentro dos arquivos html de outros components.
O serviço é simplesmente uma função javascript, juntamente com suas propriedades e métodos associados, que podem ser incluídos (via injeção de dependência) nos componentes do Angular 2. Eles permitem desenvolver código para tarefas específicas que podem ser usadas nesses componentes. –Coursetro
Angular distingue componentes de serviços para aumentar a modularidade e a reutilização. Ao separar a funcionalidade relacionada à visualização de um componente de outros tipos de processamento, você pode tornar suas classes de componentes simples e eficientes. –Angular.io
Para criar na raiz do projeto (dir app):
Para criar em um diretório de componente já existente:
Este comando irá criar dois arquivos:
!Boas práticas fazer o uso de services para injetar dados, ao invés de fazer direto por diretiva.
Utilizando o mesmo exemplo das diretivas:
Seguimos 3 passos:
Por fim,
O resultado será:
Associação de informações que estão no componente para o template e vice-e-versa.
componente <––info––> template
componente –-> template
{{x}}
[propriedade]='x'
template –-> component:
(event)='handler'
componente <–-> template:
[(ngModel)='property']
Two-way data binding: a sincronização entre o model e a view. Quando os dados no model são alterados, a view reflete a alteração e, quando os dados da view mudam, o model também é atualizado. –w3schools
Exemplos:
Dado o arquivo:
example.components.ts
{{x}}
O resultado do código acima será:
[propriedade]='x'
No html:
O resultado do código acima será:
!Quando não houver uma property no elemento para ser utilizado no property-binding (como o src da img), pode-se utilizar como property:
Adicione e remova nomes de classe CSS do atributo de classe de um elemento com uma vinculação de classe.
Class Binding se parece com Property Biding, mas em vez de uma propriedade de elemento entre colchetes, começa com a classe de prefixo, opcionalmente seguida por um ponto (.) Eo nome de uma classe CSS:[class.class-name]
. –Angular guide
Exemplo:
Alguns exemplos retirados do Guia:
A sintaxe do Style binding se parece com a de Property Binding. Em vez de uma propriedade de elemento entre colchetes, comece com o estilo de prefixo, seguido por um ponto (.) E o nome de uma propriedade de estilo CSS:
[style.style-property]
. –Guia
Alguns exemplos:
Alguns exemplos de evento são:
exemplo:
Outro exemplo:
no arquivo event-example.component.html:
no arquivo event-example.component.ts:
no arquivo app.component.html:
Propriedade + evento
!Dica: Quando trabalhando com formulários, deverá importar o @angular/forms
no arquivo de module.ts:
Exemplo:
Supondo um objeto chamado pet, que está no arquivo component.ts:
No component.html teremos:
IT Next - input/output tutorial.
Utilizar dados de um componente em outro.
Considere um componente pai e um componente filho:
de pai para filho (de fora para dentro)
Por padrão, as propriedades de um componente só estão disponíveis para ele mesmo, se quisermos expo-las para outro componente, devemos utilizar o input.
No arquivo filho.component.ts importamos os dados do componente pai para que possam ser utilizados pelo componente filho:
no componente pai (pai.component.html) ao utilizarmos o componente filho através de sua tag, devemos 'disponibilizar/repassar' a variável correspondente ao dado através dos properties:
Exemplo:
pai.component.ts:
pai.component.html
filho.component.ts
filho.component.html
Resultado:
TODO escrever sobre:
de filho para pai (de dentro para fora)
Pode ser utilizado em qualquer elemento HTML.
Exemplo:
--prod
: minificadoirá gerar o folder dist com os arquivos do build.
!dica: lib npm http-server para rodar a aplicação.
!Modifica apenas os próximos componentes, os já existentes continuarão com as extensões selecionadas anteriormente. Para modificar, será necessário mudar as extensões manualmente nos arquivos.
Estilo:
scss
para sassless
para lessstyl
para stylusAngular 2 categoriza diretivas em 3 partes:
- Diretivas com modelos conhecidos como Componentes
- Diretivas que criam e destroem elementos DOM conhecidos como Diretivas Estruturais
- Diretivas que manipulam o DOM alterando o comportamento e a aparência conhecidas como Diretivas de Atributo
–codementor.io
Diretivas estruturais são responsáveis pelo layout HTML. Eles moldam ou reformulam a estrutura do DOM, geralmente adicionando, removendo ou manipulando elementos. –Angular Guide
Exemplo:
Considere um array de números declarados no arquivo example.component.ts,
arr = [1, 2, 3];
:
Neste caso, será gerado um <li>
para cada número do array.
Resultado:
Exemplo:
Considere este select de example.component.html:
Neste caso, será feita a validação da expressão: selectedNum <= '2'
e a tag <p>
só será exibida caso a validação seja positiva (1 e 2).
TODO
O ngSwitch funciona como o switch que utilizamos no js comum.
Só para relembrarmos como é o switch no js:
Exemplo:
ao clicarmos nos botões abaixo queremos exibir uma mensagem de acordo com o botão
É usado para adicionar e remover classes CSS em um elemento HTML. Podemos vincular várias classes CSS ao NgClass simultaneamente, que podem ser adicionadas ou removidas. Existem diferentes maneiras de vincular classes CSS a NgClass que estão usando string, array e objeto. –Concrete Page
Aplica uma classe CSS.
Ao utilizar '-' deve-se estar entre aspas simples (ex: 'background-color') ou utilizar CamelCase (ex: backgroundColor)
Exemplo:
Aplica uma propriedade CSS.
Ao utilizar '-' deve-se estar entre aspas simples (ex: 'background-color') ou utilizar CamelCase (ex: backgroundColor)
Exemplos:
Exemplo:
TODO
geralmente criamos no dir shared.
Será gerado um arquivo directive-name.directive.ts
para aplicar a diretiva customizada na tag:
Permite ouvir eventos no elemento ou componente hospedeiro (host).
Neste exemplo, mudamos o tamanho da fonte quando passamos o mouse sobre o texto
Permite definir propriedades no elemento ou componente hospedeiro (host) da diretiva por meio de uma variável.
Este exemplo faz o mesmo que o demonstrado em HostListener, porém de uma maneira otimizada utilizando o HostBinding.
HostingListener + HostBinding:
Exemplo:
TODO
Service é uma categoria abrangente que inclui qualquer valor, função ou recurso de que um aplicativo precisa. Um serviço é tipicamente uma classe com um propósito estreito e bem definido. Deve fazer algo específico e fazê-lo bem.
Angular distingue componentes de serviços para aumentar a modularidade e a reutilização.
Ao separar a funcionalidade relacionada à visualização de um componente de outros tipos de processamento, você pode tornar suas classes de componentes simples e eficientes.
Idealmente, o trabalho de um componente é permitir a experiência do usuário e nada mais. Um componente deve apresentar propriedades e métodos para vinculação de dados, a fim de mediar entre a visualização (renderizada pelo modelo) e a lógica do aplicativo (que geralmente inclui alguma noção de um modelo).
Um componente pode delegar determinadas tarefas aos serviços, como buscar dados do servidor, validar a entrada do usuário ou registrar-se diretamente no console. Ao definir essas tarefas de processamento em uma classe de serviço injetável, você torna essas tarefas disponíveis para qualquer componente. Você também pode tornar seu aplicativo mais adaptável injetando diferentes provedores do mesmo tipo de serviço, conforme apropriado em diferentes circunstâncias. –angular.io
Os services geralmente são classes que reunem os métodos para serem utilizados pelos componentes.
Assim:
-> Componente: interação usuário
-> Serviço: cérebro, lógica do negócio, classes utilitárias.
Exemplo:
TODO
TODO
TODO
app.component.html:
add a tag router-outlet onde será renderizado o componente de rota
app-routing.module.ts:
no arquivo app.module.ts:
adicionar o routerLink
com o caminho que foi criado no arquivo de rotas.
o que vai mudar de um caso para o outro é o conteúdo de exemplo do arquivo welcome-page.component.ts.
app-routing.module.ts:
no home.component.html:
Para exibir um valor na tela, supondo que temos um input onde o usuário digita seu nome na página home (home.component.html):
welcome-page.component.html:
welcome-page.component.ts:
welcome-page.component.ts:
TODO
!não esquecer que todos os caminhos devem estar declarados no aquivo de rotas.
Exemplo:
Assim, quando clicado neste botão, irá acrescentar os parâmetros solicitados na url da página:
http://localhost:4200/produtos?pagina=notebook
Exemplo:
Um botão que ao ser clicado muda para a próxima página.
em produtos.components.ts:
!não esquecer de importar o FormsModule no módulo:
ngSubmit
TODO ex msg de erro
TODO serValue
TODO patch value
TODO HTTP Post
Exemplo:
no arquivo template-drive.component.html
no arquivo template-drive.component.ts
no module.ts:
no component.ts, importar a classe:
arquivo app.module.ts (ou no módulo que for utilizar):
reactive-form.component.ts:
no html:
Nessa abordagem de formulário reativo, controlamos os forms pelo componente e não pelo template (DOM), por isso ao invés de simplesmente colocar um atributo required
na tag HTML, fazemos isto através de código no componente.
Exemplo utilizando o Validators do @angular/forms:
new FormControl(defaultValueOfTheInput, Validators)
, se for mais de um tipo de validação, utilizar array: new FormControl(null, [Validators.required, Validators.email])
app.component.ts:
Podemos exibir mensagens adicionais no HTML para informar o usuário. Exemplo, um input
de email:
Suponha um input, onde o usuário digita o nome de um produto, e queremos validar, se este produto está na lista de produtos que acabaram.
!Nota: para saber mais sobre este e outros FormControls, acesse angular.io.
Podemos limpar todos os dados digitados no campo de input após clicar em submit, por exemplo:
Neste caso acima o método reset()
irá apagar o valor de todos os campos. É configurar para apagar campos específicos,
Exemplo, voltar o botão para o valor inicial de Enviar e desabilitado:
É possível atribuir um valor padrão de preenchimento de um campo de input com setValue
, por exemplo:
Com isso, o campo de input já virá previamente preenchido com email test@test.com, ainda será possível editá-lo.
Vamos supor que você queira modificar o input de email:
Os pipes são utilizados para transformar/filtrar valores no template.
Suponha um objeto product. Exemplo:
!não esquecer de importar no módulo a pipe criada e adicionar nas declarations.
!o padrão é pure, para modificar este comportamento, é necessário modificar no arquivo de pipe.ts:
Para modificar as configurações do projeto quanto a exibição de alguns dados filtrados pelo pipe:
exemplo, para exibição no formato brasileiro (ao invés de 1.99 ser 1,99):
no module.ts:
= Data source (user imput, http requests, etc)
Transferência de dados assíncrona.
Observer:
data.default
.