Angular é um framework web que capacita desenvolvedores a construir aplicações rápidas e confiáveis.

Mantido por uma equipe dedicada no Google, o Angular fornece um amplo conjunto de ferramentas, APIs e bibliotecas para simplificar e otimizar seu fluxo de trabalho de desenvolvimento. O Angular oferece uma plataforma sólida para construir aplicações rápidas e confiáveis que escalam tanto com o tamanho da sua equipe quanto com o tamanho da sua base de código. **Quer ver algum código?** Pule para nossos [Essentials](essentials) para uma visão geral rápida de como é usar Angular, ou comece no [Tutorial](tutorials/learn-angular) se você prefere seguir instruções passo a passo. ## Recursos que impulsionam seu desenvolvimento ## Desenvolva aplicações mais rápido do que nunca ## Publique com confiança ## Funciona em qualquer escala ## Open-source em primeiro lugar ## Uma comunidade próspera Comece com Angular rapidamente com starters online ou localmente com seu terminal. ## Experimente Online Se você quer apenas experimentar o Angular no seu navegador sem configurar um projeto, você pode usar nossa sandbox online: ## Configure um novo projeto localmente Se você está iniciando um novo projeto, você provavelmente vai querer criar um projeto local para poder usar ferramentas como Git. ### Pré-requisitos - **Node.js** - [v20.19.0 ou mais recente](/reference/versions) - **Editor de texto** - Recomendamos [Visual Studio Code](https://code.visualstudio.com/) - **Terminal** - Necessário para executar comandos do Angular CLI - **Ferramenta de Desenvolvimento** - Para melhorar seu fluxo de trabalho de desenvolvimento, recomendamos o [Angular Language Service](/tools/language-service) ### Instruções O guia a seguir vai orientá-lo na configuração de um projeto Angular local. #### Instale o Angular CLI Abra um terminal (se você está usando [Visual Studio Code](https://code.visualstudio.com/), você pode abrir um [terminal integrado](https://code.visualstudio.com/docs/editor/integrated-terminal)) e execute o seguinte comando: ```shell // npm npm install -g @angular/cli ``` ```shell // pnpm pnpm install -g @angular/cli ``` ```shell // yarn yarn global add @angular/cli ``` ```shell // bun bun install -g @angular/cli ``` Se você está tendo problemas para executar este comando no Windows ou Unix, consulte a [documentação do CLI](/tools/cli/setup-local#install-the-angular-cli) para mais informações. #### Crie um novo projeto No seu terminal, execute o comando `ng new` do CLI com o nome desejado do projeto. Nos exemplos a seguir, usaremos o nome de projeto de exemplo `my-first-angular-app`. ```shell ng new ``` Você verá algumas opções de configuração para seu projeto. Use as teclas de seta e enter para navegar e selecionar as opções que você desejar. Se você não tem preferências, apenas pressione a tecla enter para aceitar as opções padrão e continuar com a configuração. Depois que você selecionar as opções de configuração e o CLI executar a configuração, você deverá ver a seguinte mensagem: ```text ✔ Packages installed successfully. Successfully initialized git. ``` Neste ponto, você está pronto para executar seu projeto localmente! #### Executando seu novo projeto localmente No seu terminal, mude para o seu novo projeto Angular. ```shell cd my-first-angular-app ``` Todas as suas dependências devem estar instaladas neste ponto (o que você pode verificar checando a existência de uma pasta `node_modules` no seu projeto), então você pode iniciar seu projeto executando o comando: ```shell npm start ``` Se tudo der certo, você deverá ver uma mensagem de confirmação similar no seu terminal: ```text Watch mode enabled. Watching for file changes... NOTE: Raw file sizes do not reflect development server per-request transformations. ➜ Local: http://localhost:4200/ ➜ press h + enter to show help ``` E agora você pode visitar o caminho em `Local` (por exemplo, `http://localhost:4200`) para ver sua aplicação. Bons códigos! 🎉 ### Usando IA para Desenvolvimento Para começar a construir no seu IDE preferido com suporte a IA, [confira as regras de prompt e boas práticas do Angular](/ai/develop-with-ai). ## Próximos passos Agora que você criou seu projeto Angular, você pode aprender mais sobre Angular no nosso [guia Essentials](/essentials) ou escolher um tópico nos nossos guias detalhados! # Guia de estilo de código Angular ## Introdução Este guia cobre uma gama de convenções de estilo para código de aplicações Angular. Essas recomendações não são necessárias para que o Angular funcione, mas estabelecem um conjunto de práticas de codificação que promovem consistência no ecossistema Angular. Um conjunto consistente de práticas facilita o compartilhamento de código e a movimentação entre projetos. Este guia _não_ cobre TypeScript ou práticas gerais de codificação não relacionadas ao Angular. Para TypeScript, confira o [guia de estilo TypeScript do Google](https://google.github.io/styleguide/tsguide.html). ### Na dúvida, prefira consistência Sempre que você encontrar uma situação em que essas regras contradigam o estilo de um arquivo específico, priorize manter a consistência dentro do arquivo. Misturar diferentes convenções de estilo em um único arquivo cria mais confusão do que divergir das recomendações neste guia. ## Nomenclatura ### Separe palavras em nomes de arquivos com hífens Separe palavras dentro de um nome de arquivo com hífens (`-`). Por exemplo, um component chamado `UserProfile` tem um nome de arquivo `user-profile.ts`. ### Use o mesmo nome para os testes de um arquivo com `.spec` no final Para testes unitários, termine os nomes dos arquivos com `.spec.ts`. Por exemplo, o arquivo de teste unitário para o component `UserProfile` tem o nome de arquivo `user-profile.spec.ts`. ### Combine nomes de arquivos com o identificador TypeScript dentro deles Os nomes de arquivos geralmente devem descrever o conteúdo do código no arquivo. Quando o arquivo contém uma classe TypeScript, o nome do arquivo deve refletir o nome dessa classe. Por exemplo, um arquivo contendo um component chamado `UserProfile` tem o nome `user-profile.ts`. Se o arquivo contiver mais de um identificador principal nomeável, escolha um nome que descreva o tema comum ao código dentro dele. Se o código em um arquivo não se encaixar em um tema ou área de funcionalidade comum, considere dividir o código em arquivos diferentes. Evite nomes de arquivos excessivamente genéricos como `helpers.ts`, `utils.ts` ou `common.ts`. ### Use o mesmo nome de arquivo para o TypeScript, template e estilos de um component Components geralmente consistem em um arquivo TypeScript, um arquivo de template e um arquivo de estilo. Esses arquivos devem compartilhar o mesmo nome com extensões de arquivo diferentes. Por exemplo, um component `UserProfile` pode ter os arquivos `user-profile.ts`, `user-profile.html` e `user-profile.css`. Se um component tiver mais de um arquivo de estilo, acrescente ao nome palavras adicionais que descrevam os estilos específicos desse arquivo. Por exemplo, `UserProfile` pode ter arquivos de estilo `user-profile-settings.css` e `user-profile-subscription.css`. ## Estrutura do projeto ### Todo o código da aplicação vai em um diretório chamado `src` Todo o seu código de UI Angular (TypeScript, HTML e estilos) deve ficar dentro de um diretório chamado `src`. Código que não está relacionado à UI, como arquivos de configuração ou scripts, deve ficar fora do diretório `src`. Isso mantém o diretório raiz da aplicação consistente entre diferentes projetos Angular e cria uma separação clara entre código de UI e outro código no seu projeto. ### Inicialize sua aplicação em um arquivo chamado `main.ts` diretamente dentro de `src` O código para iniciar, ou **bootstrap**, uma aplicação Angular deve sempre ficar em um arquivo chamado `main.ts`. Isso representa o ponto de entrada principal da aplicação. ### Agrupe arquivos intimamente relacionados no mesmo diretório Components Angular consistem em um arquivo TypeScript e, opcionalmente, um template e um ou mais arquivos de estilo. Você deve agrupá-los no mesmo diretório. Testes unitários devem ficar no mesmo diretório que o código em teste. Evite coletar testes não relacionados em um único diretório `tests`. ### Organize seu projeto por áreas de funcionalidade Organize seu projeto em subdiretórios baseados nas funcionalidades da sua aplicação ou temas comuns ao código nesses diretórios. Por exemplo, a estrutura do projeto para um site de cinema, MovieReel, pode parecer com isso: ``` src/ ├─ movie-reel/ │ ├─ show-times/ │ │ ├─ film-calendar/ │ │ ├─ film-details/ │ ├─ reserve-tickets/ │ │ ├─ payment-info/ │ │ ├─ purchase-confirmation/ ``` Evite criar subdiretórios baseados no tipo de código que vive nesses diretórios. Por exemplo, evite criar diretórios como `components`, `directives` e `services`. Evite colocar tantos arquivos em um diretório que se torne difícil de ler ou navegar. À medida que o número de arquivos em um diretório cresce, considere dividir ainda mais em subdiretórios adicionais. ### Um conceito por arquivo Prefira focar arquivos de código em um único _conceito_. Para classes Angular especificamente, isso geralmente significa um component, directive ou service por arquivo. No entanto, não há problema se um arquivo contiver mais de um component ou directive se suas classes forem relativamente pequenas e se vincularem como parte de um único conceito. Na dúvida, vá com a abordagem que leva a arquivos menores. ## Injeção de dependência ### Prefira a função `inject` sobre injeção de parâmetro de construtor Prefira usar a função `inject` em vez de injetar parâmetros de construtor. A função `inject` funciona da mesma forma que a injeção de parâmetro de construtor, mas oferece várias vantagens de estilo: - `inject` é geralmente mais legível, especialmente quando uma classe injeta muitas dependências. - É sintaticamente mais direto adicionar comentários às dependências injetadas - `inject` oferece melhor inferência de tipo. - Ao direcionar para ES2022+ com [`useDefineForClassFields`](https://www.typescriptlang.org/tsconfig/#useDefineForClassFields), você pode evitar separar declaração e inicialização de campo quando os campos leem dependências injetadas. [Você pode refatorar código existente para `inject` com uma ferramenta automática](reference/migrations/inject-function). ## Components e directives ### Escolhendo seletores de component Veja o [guia de Components para detalhes sobre como escolher seletores de component](guide/components/selectors#choosing-a-selector). ### Nomeando membros de component e directive Veja o guia de Components para detalhes sobre [nomear propriedades de input](guide/components/inputs#choosing-input-names) e [nomear propriedades de output](guide/components/outputs#choosing-event-names). ### Escolhendo seletores de directive Directives devem usar o mesmo [prefixo específico da aplicação](guide/components/selectors#selector-prefixes) que seus components. Ao usar um seletor de atributo para uma directive, use um nome de atributo camelCase. Por exemplo, se sua aplicação se chama "MovieReel" e você constrói uma directive que adiciona um tooltip a um elemento, você pode usar o seletor `[mrTooltip]`. ### Agrupe propriedades específicas do Angular antes dos métodos Components e directives devem agrupar propriedades específicas do Angular, normalmente perto do topo da declaração da classe. Isso inclui dependências injetadas, inputs, outputs e queries. Defina essas e outras propriedades antes dos métodos da classe. Essa prática facilita encontrar as APIs de template da classe e as dependências. ### Mantenha components e directives focados em apresentação O código dentro dos seus components e directives geralmente deve se relacionar à UI mostrada na página. Para código que faça sentido por si só, desacoplado da UI, prefira refatorar para outros arquivos. Por exemplo, você pode extrair regras de validação de formulário ou transformações de dados em funções ou classes separadas. ### Evite lógica excessivamente complexa em templates Templates do Angular são projetados para acomodar [expressões semelhantes a JavaScript](guide/templates/expression-syntax). Você deve aproveitar essas expressões para capturar lógica relativamente direta diretamente em expressões de template. Quando o código em um template fica muito complexo, no entanto, refatore a lógica para o código TypeScript (normalmente com um [computed](guide/signals#computed-signals)). Não há uma regra única e rápida que determine o que constitui "complexo". Use seu melhor julgamento. ### Use `protected` em membros de classe que são usados apenas pelo template de um component Os membros públicos de uma classe de component definem intrinsecamente uma API pública que é acessível via injeção de dependência e [queries](guide/components/queries). Prefira acesso `protected` para quaisquer membros que são destinados a serem lidos do template do component. ```ts @Component({ ..., template: `

{{ fullName() }}

`, }) export class UserProfile { firstName = input(); lastName = input(); // `fullName` não faz parte da API pública do component, mas é usado no template. protected fullName = computed(() => `${this.firstName()} ${this.lastName()}`); } ``` ### Use `readonly` para propriedades que não devem mudar Marque propriedades de component e directive inicializadas pelo Angular como `readonly`. Isso inclui propriedades inicializadas por `input`, `model`, `output` e queries. O modificador de acesso readonly garante que o valor definido pelo Angular não seja sobrescrito. ```ts @Component({/* ... */}) export class UserProfile { readonly userId = input(); readonly userSaved = output(); readonly userName = model(); } ``` Para components e directives que usam as APIs `@Input`, `@Output` e queries baseadas em decorator, esse conselho se aplica a propriedades de output e queries, mas não a propriedades de input. ```ts @Component({/* ... */}) export class UserProfile { @Output() readonly userSaved = new EventEmitter(); @ViewChildren(PaymentMethod) readonly paymentMethods?: QueryList; } ``` ### Prefira `class` e `style` em vez de `ngClass` e `ngStyle` Prefira bindings `class` e `style` em vez de usar as directives [`NgClass`](/api/common/NgClass) e [`NgStyle`](/api/common/NgStyle). ```html
``` Ambos os bindings `class` e `style` usam uma sintaxe mais direta que se alinha mais proximamente aos atributos HTML padrão. Isso torna seus templates mais fáceis de ler e entender, especialmente para desenvolvedores familiarizados com HTML básico. Além disso, as directives `NgClass` e `NgStyle` incorrem em um custo de desempenho adicional em comparação com a sintaxe de binding `class` e `style` integrada. Para mais detalhes, consulte o [guia de bindings](/guide/templates/binding#css-class-and-style-property-bindings) ### Nomeie event handlers pelo que eles _fazem_, não pelo evento que os dispara Prefira nomear event handlers pela ação que executam em vez do evento que os dispara: ```html ``` Usar nomes significativos como este facilita saber o que um evento faz ao ler o template. Para eventos de teclado, você pode usar os modificadores de evento de tecla do Angular com nomes de handler específicos: ```html