Criando uma Aplicação em Angular
Nos temas anteriores, abordamos informações iniciais sobre Angular, além da instalação e configuração das ferramentas necessárias para trabalhar com o framework. Agora, vamos criar uma aplicação simples do zero.
Vamos criar uma pasta no disco rígido para nossa aplicação. Vamos chamá-la de purchaseapp
. Dentro dessa pasta, criaremos um novo arquivo chamado package.json
com o seguinte conteúdo:
{
"version": 1,
"projects": {
"helloapp": {
"projectType": "application",
"root": "",
"sourceRoot": "src",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/helloapp",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": ["zone.js"],
"tsConfig": "tsconfig.json",
"aot": true
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"buildTarget": "helloapp:build"
}
}
}
}
}
}
Também adicionaremos um novo arquivo tsconfig.json
à pasta do projeto:
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"module": "ES2022",
"moduleResolution": "node",
"target": "ES2022",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"ES2022",
"dom"
]
},
"files": ["src/main.ts"],
"include": ["src/**/*.d.ts"]
}
Como explicado anteriormente, o arquivo package.json
define os pacotes e dependências que serão utilizados no projeto. Já o arquivo tsconfig.json
configura o compilador TypeScript.
Usaremos o Angular CLI para gerar build do projeto, por isso, também criaremos o arquivo angular.json
na pasta do projeto:
{
"version": 1,
"projects": {
"purchaseapp": {
"projectType": "application",
"root": "",
"sourceRoot": "src",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/purchaseapp",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": ["zone.js"],
"tsConfig": "tsconfig.json",
"aot": true
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"buildTarget": "purchaseapp:build"
}
}
}
}
}
}
Após criar esses três arquivos na pasta do projeto, abra o terminal e navegue até a pasta do projeto com o comando cd
:
C:\WINDOWS\system32>cd C:\angular\purchaseapp
Em seguida, execute o comando npm install
, que instalará todos os módulos necessários:
C:\angular\purchaseapp>npm install
Após executar esse comando, uma subpasta node_modules
aparecerá na pasta do projeto, contendo todas as dependências e pacotes necessários.
Agora, vamos criar a pasta src
na pasta do projeto, e dentro dela, a pasta app
.
Na pasta src/app
, adicione um novo arquivo chamado app.component.ts
com o seguinte código:
import { CommonModule } from "@angular/common";
import { Component } from "@angular/core";
import { FormsModule } from "@angular/forms";
class Item {
purchase: string;
done: boolean;
price: number;
constructor(purchase: string, price: number) {
this.purchase = purchase;
this.price = price;
this.done = false;
}
}
@Component({
selector: "purchase-app",
standalone: true,
imports: [FormsModule, CommonModule],
template: `
<h1>Lista de Compras</h1>
<div>
<p>
<label>Produto</label><br />
<input [(ngModel)]="text" />
</p>
<p>
<label>Preço</label><br />
<input type="number" [(ngModel)]="price" />
</p>
<button (click)="addItem(text, price)">Adicionar</button>
</div>
<table>
<thead>
<tr>
<th>Produto</th>
<th>Preço</th>
<th>Comprado</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of items">
<td>{{ item.purchase }}</td>
<td>{{ item.price }}</td>
<td><input type="checkbox" [(ngModel)]="item.done" /></td>
</tr>
</tbody>
</table>
`,
})
export class AppComponent {
text: string = "";
price: number = 0;
items: Item[] = [
{ purchase: "Pão", done: false, price: 15.9 },
{ purchase: "Manteiga", done: false, price: 60 },
{ purchase: "Batata", done: true, price: 22.6 },
{ purchase: "Queijo", done: false, price: 310 },
];
addItem(text: string, price: number): void {
if (text == null || text.trim() === "" || price == null) return;
this.items.push(new Item(text, price));
}
}
Aqui, as primeiras linhas do código importam os módulos necessários para o componente, como CommonModule
e FormsModule
.
No próprio componente, é definido um conjunto inicial de itens que serão exibidos na página:
items: Item[] = [
{ purchase: "Pão", done: false, price: 15.9 },
{ purchase: "Manteiga", done: false, price: 60 },
{ purchase: "Batata", done: true, price: 22.6 },
{ purchase: "Queijo", done: false, price: 310 }
];
Também há um método para adicionar novos itens a essa lista:
addItem(text: string, price: number): void {
if (text == null || text.trim() === "" || price == null) return;
this.items.push(new Item(text, price));
}
O template, responsável por exibir os dados da lista items
em uma tabela, foi definido diretamente no componente. Em aplicações maiores, é recomendável separar templates extensos em arquivos distintos para facilitar a manutenção do código. No entanto, neste exemplo, vamos mantê-lo no próprio componente.
No template, usamos a diretiva *ngFor
para iterar sobre o array items
e renderizar as linhas da tabela:
<tr *ngFor="let item of items;">
<td>{{item.purchase}}</td>
<td>{{item.price}}</td>
<td><input type="checkbox" [(ngModel)]="item.done" /></td>
</tr>
Acima da tabela, também há um formulário para adicionar novos itens, e o método addItem()
é acionado ao clicar no botão.
No diretório src
, criaremos um arquivo main.ts
para iniciar o projeto:
import { bootstrapApplication } from "@angular/platform-browser";
import { AppComponent } from "./app/app.component";
bootstrapApplication(AppComponent).catch((e) => console.error(e));
Aqui, a função bootstrapApplication
é usada para iniciar a aplicação com base no componente AppComponent
que definimos.
Por fim, definimos a página principal index.html
na pasta src
:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Aplicação de Compras</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<purchase-app>Carregando...</purchase-app>
</body>
</html>
Com isso, nossa estrutura de projeto estará pronta:
purchaseapp/ |-- angular.json |-- package.json |-- tsconfig.json |-- node_modules/ |-- src/ |-- index.html |-- main.ts |-- app/ |-- app.component.ts
Agora, podemos executar o projeto. No terminal, navegue até a pasta do projeto e execute o comando:
C:\angular\purchaseapp>ng serve --open
Após executar esse comando, o navegador abrirá automaticamente exibindo a aplicação. Se tudo estiver correto, você verá a lista de compras com os itens definidos no componente: