Confira as grandes novidades do Angular 19
![](https://miro.medium.com/v2/resize:fit:700/1*3D7C-qmYxFfqoq6eUaPRAg.png)
Depois de uma versão incrível que foi o Angular 18, já temos o seu sucessor. Como protocolo, a equipe do Angular promete lançar uma nova versão a cada 6 meses, e cá estamos com a versão 19, que estabilizou várias features da versão anterior e também trouxe excelentes novidades, além de vários schematics, onde podemos migrar facilmente nosso código para as novas estruturas.
Atualizando sua aplicação
Como muitos devem saber, é muito simples atualizar a versão da sua aplicação Angular utilizando o Angular CLI. Para atualizar para a versão 19 basta seguir o passo-a-passo no Guia de Atualização.
Dica: A minha Talk Angular Update: Guia Prático para Atualizações Sem Estresse talvez possa te ajudar nesse processo.
Agora que estamos com a aplicação atualizada, vamos conhecer as principais novidades apresentadas nesta versão.
Standalone por padrão
Na versão 19, o Angular terá standalone: true
como padrão para componentes, pipes e diretivas!
Nas últimas versões, percebemos como Standalone components vêm evoluindo e ganhando cada vez mais espaço dentro das aplicações. Parece ser um excelente momento para deixá-las como padrão.
"Quero continuar usando componentes com NgModules. O que devo fazer?" Basta atribuir a propriedade standalone: false
.
Para atribuir um componente Standalone, utilizávamos desta maneira:
@Component({
standalone: true,
selector: 'app-user',
template: './user.component.html',
})
export class UserComponent {…}
Agora podemos omitir a propriedade:
@Component({
selector: 'app-user',
template: './user.component.html',
})
export class UserComponent {…}
Diagnóstico de imports não utilizados em Standalone Components
Um dos recursos mais esperados desde a introdução de Standalone Components é a capacidade de detectar se um componente ou diretiva importada para um componente está realmente sendo usada. Agora, essa necessidade foi finalmente abordada!
![](https://miro.medium.com/v2/resize:fit:700/0*bvrdRqXvoOHphdRY.png)
Este diagnóstico relata um warning caso tenham importações não utilizadas , dando aos desenvolvedores um aviso sem quebrar a compilação. Caso seja necessário, o comportamento de diagnóstico pode ser desabilitado usando a seguinte opção no arquivo tsconfig.json
:
{
"angularCompilerOptions": {
"extendedDiagnostics": {
"checks": {
"unusedStandaloneImports": "suppress"
}
}
}
}
Nova API de configuração de roteamento para SSR
É impressionante como Server Side Rendering vem sendo uma prioridade para o Angular. Nesta versão conseguimos definir qual será o modo de renderização para cada página, utilizando a interface ServerRoutes.
export const serverRouteConfig: ServerRoute[] = [
{ path: '/login', mode: RenderMode.Server },
{ path: '/dashboard', mode: RenderMode.Client },
{ path: '/**', mode: RenderMode.Prerender },
];
- 𝐑𝐞𝐧𝐝𝐞𝐫𝐌𝐨𝐝𝐞.𝐒𝐞𝐫𝐯𝐞𝐫: Renderização do lado do servidor
- 𝐑𝐞𝐧𝐝𝐞𝐫𝐌𝐨𝐝𝐞.𝐂𝐥𝐢𝐞𝐧𝐭: Renderização do lado do cliente
- 𝐑𝐞𝐧𝐝𝐞𝐫𝐌𝐨𝐝𝐞.𝐏𝐫𝐞𝐫𝐞𝐧𝐝𝐞𝐫: Pré-renderização de conteúdo estático
Fantástico, não?
Incremental Hydration
E as novidades para Server Side Rendering não param por aí. Incremental Hydration permite que você anote partes do seu template, usando a sintaxe já conhecida @defer
, instruindo o Angular a carregá-las e hidratá-las em eventos específicos, de forma Lazy.
Veja só este exemplo em ação para uma página renderizada do lado do servidor. Conforme o usuário interage com a página, os componentes são carregados de forma automática, proporcionando uma performance fantástica para aplicações Server Side!
Você pode conferir mais a fundo essa feature neste vídeo.
Resource API
A próxima versão do Angular vai introduzir uma nova forma de recuperar os dados de um servidor HTTP: a Resource API.
Muito parecida com a TanStack Query do React, ela vai permitir que acompanhemos o status de uma requisição e atualizemos os dados localmente quando necessário.
Mas o mais curioso é que os principais casos de uso são utilizando a Fetch API e não o já conhecido HttpClient do framework. O que significa que o RxJS vem se tornando cada vez mais opcional nas novas versões do Angular.
import { resource } from "@angular/core";
@Component()
export class MyComponent {
todosResource = resource({
loader: () => {
return fetch(`https://server-todo.com`)
.then((res) => res.json() as Promise<Todo[]>);
},
});
refresh() {
this.todosResource.refresh();
}
}
A Resource API é bastante integrada com os Signals. Sabemos que os Signals são reativos, e os dois funcionam muito bem juntos. Veja no exemplo abaixo onde temos um Signal todoId
e toda vez que esse valor mudar, uma nova requisição é feita.
import { resource } from "@angular/core";
@Component()
export class MyComponent {
todoId = signal(1);
todoResource = resource({
request: this.todoId,
loader: ({ request: todoId }) => {
return fetch(
`https://jsonplaceholder.typicode.com/todos/${todoId}`,
).then((res) => res.json() as Promise<Todo>);
},
});
}
Para saber mais sobre a Resource API confira este artigo completo.
Conclusão
Muitos outros recursos foram apresentados na versão 19, veja a lista completa neste link e também no Blog oficial do Angular.
Podemos concluir que cada vez mais o Angular está olhando para o futuro, simplificando e aprimorando a experiência de desenvolvimento. Recursos como Standalone Components e Signals já são uma realidade e vieram pra ficar de vez. Além disso, o RxJS, que possui uma curva de aprendizado alta, pode se tornar totalmente opcional dado essas novas APIs que o Angular vem disponibilizando.