<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Matheus Rian</title>
    <description>The latest articles on DEV Community by Matheus Rian (@matheusriann).</description>
    <link>https://dev.to/matheusriann</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F393273%2F8fa85c45-3eea-4082-abb3-adcff50c2438.jpg</url>
      <title>DEV Community: Matheus Rian</title>
      <link>https://dev.to/matheusriann</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matheusriann"/>
    <language>en</language>
    <item>
      <title>Nx FullStack: Angular + NestJS</title>
      <dc:creator>Matheus Rian</dc:creator>
      <pubDate>Wed, 31 Jan 2024 19:20:39 +0000</pubDate>
      <link>https://dev.to/matheusriann/nx-fullstack-angular-nestjs-5gfn</link>
      <guid>https://dev.to/matheusriann/nx-fullstack-angular-nestjs-5gfn</guid>
      <description>&lt;p&gt;Este artigo apresenta um guia passo a passo para integrar Angular e NestJS em um projeto Nx. &lt;/p&gt;

&lt;p&gt;Vamos começar estabelecendo um projeto Angular e, em seguida, adicionar o NestJS. Ao final, você terá um sistema integrado, com frontend e backend comunicando-se, destacando a eficiência e a praticidade de unir estas tecnologias no Nx.&lt;/p&gt;

&lt;p&gt;Caso prefira assistir o vídeo da implementação, &lt;a href="https://youtu.be/jIiu8X6lHiw"&gt;acesse aqui&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Criando o workspace Nx com Angular
&lt;/h2&gt;

&lt;p&gt;| Para projetos já existentes, certifique-se de que o Nx está atualizado e funcionando conforme esperado.&lt;/p&gt;

&lt;p&gt;Vamos criar um workspace Nx, usando o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-nx-workspace@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nas opções de Stack, &lt;strong&gt;iremos utilizar o angular e Integrated Monorepo&lt;/strong&gt;.&lt;br&gt;
Segue a imagem abaixo com as opções selecionadas&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flb5wmjuo2jnoiq5trb5t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flb5wmjuo2jnoiq5trb5t.png" alt="A imagem mostra as opções escolhidas pela pessoa" width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após a instalação, entraremos no nosso projeto (cd [nome-pasta]). Na pasta apps, estará o nosso projeto angular (nomeado de "ng") &lt;/p&gt;

&lt;p&gt;Para executar o projeto, use o comando: nx serve [nome-projeto]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nx serve ng
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Instalando o NestJS no workspace
&lt;/h2&gt;

&lt;p&gt;Nosso primeiro passo é adicionar o plugin NestJS para o Nx. Execute o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @nrwl/nest --save-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, iremos gerar uma nova aplicação para o NestJS dentro do nosso Monorepo, utilizando o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nx generate @nrwl/nest:application [name]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;| Troque [name] para o nome que você deseja usar para a aplicação. Neste artigo, nomeamos para nest&lt;/p&gt;

&lt;p&gt;Após isso, entraremos no nosso projeto. Na pasta apps, e agora, estará o nosso projeto angular (nomeado de "ng") e o projeto NestJS (nomeado de "nest")&lt;/p&gt;

&lt;p&gt;Para executar o projeto, use o comando: nx serve [nome-projeto]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nx serve nest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Parabéns 🎉. Agora temos o nosso frontend e backend no ambiente Nx e ambos funcionando! Agora, para fecharmos com chave de ouro, iremos integrar-los!&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrando o NestJS com o Angular usando o Proxy
&lt;/h2&gt;

&lt;p&gt;Para permitir a comunicação do seu app Angular com o NestJS durante o desenvolvimento, definiremos uma configuração de proxy. No diretório do app Angular(“ng” neste exemplo), entre na pasta src, e em seguida, crie um arquivo chamado proxy.conf.json e adicione o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"/api"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:[PORT]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"secure"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Substitua [PORT] pela porta em que seu app NestJS é executado.&lt;/p&gt;

&lt;p&gt;| Ao usar um proxy, você pode fazer requisições para um caminho relativo no próprio app Angular e evitar problemas de CORS. Além disso facilita o desenvolvimento e testes.&lt;/p&gt;

&lt;p&gt;Após definir o Proxy, dentro do seu app Angular, entre no arquivo “project.json” e insira a configuração do proxy à chave “options” do “serve”:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"serve"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"executor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@angular-devkit/build-angular:dev-server"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"proxyConfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"apps/[angular-app-name]/src/proxy.conf.json"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Troque [angular-app-name] com o nome do seu app Angular.&lt;/p&gt;

&lt;p&gt;Agora você pode começar a adicionar seus endpoints ao app NestJS e acessa-los no app Angular! 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  Testando a integração
&lt;/h2&gt;

&lt;p&gt;Para testar a sua integração, você precisa estar rodando tanto o back quanto o front e em seguida implementar o trecho de código abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppComponent&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;OnInit&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;HttpClient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ng&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nf"&gt;ngOnInit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Abra o developer tools do seu browser, e em network, verifique se a chamada foi feita com sucesso! Em caso de sucesso, você tem uma aplicação FullStack pronta para uso!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Com a conclusão deste guia, você agora tem um ambiente Nx configurado com Angular para o frontend e NestJS para o backend, ambos integrados e funcionando harmoniosamente. Este setup oferece uma plataforma robusta e eficiente para o desenvolvimento de aplicações fullStack. Segue algumas vantagens interessantes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monorepo&lt;/strong&gt;: A utilização do Nx como monorepo facilita o gerenciamento de múltiplas aplicações e bibliotecas, mantendo tudo centralizado e acessível.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Desenvolvimento Coeso&lt;/strong&gt;: A integração entre Angular e NestJS no mesmo ambiente proporciona uma experiência de desenvolvimento coesa e simplificada, com ferramentas e configurações compartilhadas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Proxy para Desenvolvimento Local&lt;/strong&gt;: Configurar um proxy para o app Angular resolve problemas comuns de CORS durante o desenvolvimento local e permite que requisições sejam feitas como se tudo estivesse hospedado em um único servidor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Eficiência na Comunicação&lt;/strong&gt;: A capacidade de fazer requisições a partir do Angular para o NestJS de maneira eficiente e segura melhora significativamente a fluidez da comunicação entre frontend e backend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Teste e Depuração Facilitados&lt;/strong&gt;: Rodar ambos, frontend e backend, em um ambiente integrado facilita o teste e a depuração, permitindo que você veja as mudanças em tempo real e ajuste rapidamente conforme necessário.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Parabéns por chegar até aqui! 🎉 Espero que este artigo tenha lhe ajudado! &lt;br&gt;
Com a infraestrutura básica configurada, o próximo passo é explorar e adicionar funcionalidades específicas ao seu app, tanto no frontend quanto no backend.&lt;/p&gt;

&lt;p&gt;Atenciosamente,&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/matheus-riann/"&gt;Matheus Rian&lt;/a&gt;&lt;br&gt;
☝️ Me siga para receber novos conteúdos e artigos!&lt;/p&gt;

&lt;p&gt;Repositório com código fonte: &lt;a href="https://github.com/NG-Brasil/Nx-FullStack"&gt;https://github.com/NG-Brasil/Nx-FullStack&lt;/a&gt; &lt;/p&gt;

</description>
      <category>angular</category>
      <category>nx</category>
      <category>nestjs</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Angular Signals: Na Prática</title>
      <dc:creator>Matheus Rian</dc:creator>
      <pubDate>Wed, 20 Dec 2023 16:00:32 +0000</pubDate>
      <link>https://dev.to/matheusriann/angular-signals-na-pratica-140o</link>
      <guid>https://dev.to/matheusriann/angular-signals-na-pratica-140o</guid>
      <description>&lt;p&gt;O Angular Signals é uma nova funcionalidade introduzida no Angular 16 que permite rastrear e lidar com alterações de estados da aplicação de forma mais granular. Isso permite que o Angular otimize seu mecanismo de detecção de mudanças (CD), recalculando apenas o que realmente importa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Neste artigo, aprenderemos sobre:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O que é um Signal&lt;/li&gt;
&lt;li&gt;Tipos de Signals&lt;/li&gt;
&lt;li&gt;Como criar um Writable Signal&lt;/li&gt;
&lt;li&gt;Como alterar o valor de um Writable Signal&lt;/li&gt;
&lt;li&gt;Como criar um Computed Signal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No primeiro artigo sobre Angular Signals, vimos a motivação principal para a criação dessa funcionalidade (&lt;a href="https://dev.to/matheusriann/angular-signals-por-que-surgiu-cfh"&gt;acesse aqui&lt;/a&gt;). No artigo de hoje, vamos explorar como o Angular Signals funciona e como ele pode ser usado para melhorar o desempenho de aplicações Angular. Além disso, &lt;strong&gt;VOCÊ&lt;/strong&gt; irá escrever seu primeiro signal. &lt;strong&gt;Mas o que é um...&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal
&lt;/h2&gt;

&lt;p&gt;Um Signal é um wrapper em torno de um valor que notifica os consumidores(Consumers) interessados quando esse valor muda. Os Signals sempre devem conter um valor, e podem conter qualquer valor, desde primitivos simples até estruturas de dados complexas.&lt;/p&gt;

&lt;p&gt;Essa forma mais granular nos permitirá, no futuro, escrever componentes com desempenho incrível em aplicativos totalmente sem zona(zoneless), eliminando a sobrecarga e as peculiaridades do zone.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tipos de Signals
&lt;/h2&gt;

&lt;p&gt;Existem dois tipos de Signals: Writable Signals e Read-Only Signals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Writable Signals:&lt;/strong&gt; podem ser &lt;strong&gt;alterados&lt;/strong&gt; por qualquer componente ou serviço que os consuma.&lt;br&gt;
&lt;strong&gt;Read-Only Signals:&lt;/strong&gt; só podem ser lidos, mas &lt;strong&gt;não alterados&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Criando um Writable Signal
&lt;/h2&gt;

&lt;p&gt;Para criar Writable Signal, chamamos a função signal, passando seu valor inicial.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;signal&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;WritableSignal&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Signals são getter functions.&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="c1"&gt;// 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Alterando o valor de um Writable Signal
&lt;/h3&gt;

&lt;p&gt;O valor de um Writable Signal pode ser alterado usando o método &lt;strong&gt;&lt;em&gt;set()&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O método &lt;strong&gt;&lt;em&gt;update()&lt;/em&gt;&lt;/strong&gt; também pode ser usado para recalcular o valor usando o valor anterior.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prevValue&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;prevValue&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Partiu codar!!
&lt;/h3&gt;

&lt;p&gt;Para facilitar a compreensão dos conceitos, criei um playground onde você pode usar os métodos do Writable Signal que aprendemos em um componente. Neste exemplo, implementamos uma funcionalidade básica de contador.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackblitz.com/edit/stackblitz-starters-2ckxrz?file=src%2Fapp.component.ts"&gt;Desafio 1: Count Signals&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Criando um Computed Signal
&lt;/h2&gt;

&lt;p&gt;Computed signals são read-only(apenas leitura) signals que derivam seu valor de outros signals. Imagine que você tem um salário de R$ 3.000 e todo mês investe 10% dele. Se você receber um aumento de 20%, o valor do seu investimento também aumentará.&lt;/p&gt;

&lt;p&gt;No caso da analogia do salário, o valor dos 10% de investimento é uma expressão que depende do salário. Se o salário mudar, o valor do investimento também mudará.&lt;/p&gt;

&lt;p&gt;Um computed signal pode ser usado para representar o valor dos 10% de investimento. Isso torna mais fácil manter seu código atualizado quando o salário for alterado.&lt;/p&gt;

&lt;p&gt;O signal investment depende do signal salary. Sempre que o salary atualizar, o angular sabe que o investment precisa ser recalculado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Para criar um computed signal, nós chamamos a função computed passando como argumento uma callback.&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;salary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;WritableSignal&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;investment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Signal&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;salary&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🚨 &lt;em&gt;&lt;em&gt;Computed Signals podem também ser baseados em outros computed signals!&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Partiu codar!!
&lt;/h3&gt;

&lt;p&gt;Para facilitar a compreensão dos conceitos, criei um playground onde você pode usar os métodos do Computed Signal que aprendemos em um componente. Neste exemplo, implementamos uma funcionalidade básica de distribuição do salário para investimentos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackblitz.com/edit/stackblitz-starters-tifkxp?file=src%2Fapp.component.ts"&gt;Desafio 2: Salary Signals&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Angular Signals é uma nova funcionalidade poderosa que pode ser usada para melhorar o desempenho de aplicações Angular. Signals permitem que você rastreie e lide com alterações de estados da aplicação de forma mais granular, o que permite que o Angular otimize seu mecanismo de detecção de mudanças (CD).&lt;/p&gt;

&lt;p&gt;Saimos da teoria e VOCÊ realizou dois exemplos práticos de como usar Signals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Um contador básico&lt;/li&gt;
&lt;li&gt;Uma distribuição de salário para investimentos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Espero que este artigo tenha ajudado você a entender melhor como Angular Signals funciona e como ele pode ser usado para melhorar o desempenho de suas aplicações Angular.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parabéns por chegar até aqui! 🎉&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agradeço por dedicar seu tempo à leitura do artigo sobre signals no Angular e espero que continuemos a trocar conhecimentos valiosos. No próximo artigo da série de signals, vamos discutir o conceito de Producer/Consumer utilizando analogias e imagens para maior entendimento.&lt;/p&gt;

&lt;p&gt;Com gratidão,&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/matheus-riann/"&gt;Matheus Rian&lt;/a&gt;&lt;br&gt;
☝️ Me siga para receber novos conteúdos e artigos!&lt;/p&gt;

&lt;p&gt;Referências&lt;br&gt;
&lt;a href="https://angular.dev/"&gt;https://angular.dev/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://angular-signals.dev/"&gt;https://angular-signals.dev/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>frontend</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Angular Signals: Por que surgiu?</title>
      <dc:creator>Matheus Rian</dc:creator>
      <pubDate>Tue, 05 Dec 2023 18:29:14 +0000</pubDate>
      <link>https://dev.to/matheusriann/angular-signals-por-que-surgiu-cfh</link>
      <guid>https://dev.to/matheusriann/angular-signals-por-que-surgiu-cfh</guid>
      <description>&lt;p&gt;Antes de discutirmos os signals, &lt;strong&gt;é crucial compreender a principal motivação por trás de sua introdução no Angular.&lt;/strong&gt; A razão fundamental está relacionada ao mecanismo de detecção de alterações(CD) presente no Angular.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mecanismo de detecção de alterações(CD)
&lt;/h2&gt;

&lt;p&gt;Atualmente, o Angular faz uso do &lt;em&gt;&lt;em&gt;Zone.js&lt;/em&gt;&lt;/em&gt;, cujo principal objetivo é notificar quando ocorrem eventos significativos no sistema. Este mecanismo abrange, por padrão, eventos do navegador, como click, mouseover, keyup, entre outros. Além disso, o Zone.js também monitora a execução de funções como setTimeout() e setInterval(), bem como as requisições HTTP. &lt;/p&gt;

&lt;p&gt;Quando ocorrer algum destes eventos, o angular executa o CD. No entanto, devido a esse mecanismo, NÃO temos informações detalhadas sobre o que exatamente aconteceu, o que mudou ou qual é o impacto dessa alteração.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analogia com o cotidiano
&lt;/h3&gt;

&lt;p&gt;Para ilustrar essa situação, imagine que sua mãe fez uma compra no mercado, por engano trouxe para casa o produto errado e pediu que você o trocasse, sem fornecer informações adicionais. Agora, você se encontra em uma avenida movimentada, repleta de diferentes mercados.&lt;/p&gt;

&lt;p&gt;Essa tarefa de encontrar o local certo para a troca assemelha-se à detecção de alterações(CD) atual do Angular. Não há uma indicação precisa; o Angular apenas sabe que algo aconteceu, por isso, o processo em busca de mudanças percorre toda a árvore de componentes, começando do root(Ex.: AppComponent).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agora&lt;/strong&gt;, considere a situação em que sua mãe, ao solicitar a troca do produto errado, fornece todas as informações necessárias. Ela especifica o nome do mercado correto, sua localização exata na avenida movimentada e até mesmo orienta sobre como reconhecer o produto certo. Com essas instruções claras, sua tarefa de troca torna-se muito mais fácil e eficiente.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;É exatamente isso que os signals fazem! &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Signals
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Eles oferecem detalhes específicos sobre onde, como e o que deve ser feito.&lt;/strong&gt; Com os signals, &lt;em&gt;&lt;em&gt;o Angular não precisa mais percorrer toda a árvore de componentes para identificar o que precisa ser alterado&lt;/em&gt;&lt;/em&gt;. Ele já possui as informações necessárias!&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;principal vantagem&lt;/strong&gt; dos signals é &lt;strong&gt;permitir a atualização apenas das partes da aplicação que realmente mudaram&lt;/strong&gt;, evitando verificações desnecessárias e tornando a aplicação mais eficiente. &lt;strong&gt;Além disso, apresentam benefícios adicionais&lt;/strong&gt;, alguns deles são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Menos ganchos de ciclo de vida: Em vez de depender de ngOnChanges para capturar as mudanças, podemos simplesmente definir um signal e reagir diretamente a essa mudança.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Os signals podem ser utilizados não apenas em componentes, mas também em outras partes do seu sistema, como serviços.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integração com RxJS: Isso assegura a melhor experiência do desenvolvedor sem forçar mudanças significativas no design da arquitetura atual e nas práticas da equipe.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Os signals representam uma evolução significativa no ecossistema do Angular, proporcionando clareza e eficiência à detecção de alterações. Ao comparar a abordagem anterior, é evidente que agora o Angular possui um mecanismo mais preciso e orientado, onde, em um futuro próximo conseguiremos criar zoneless applications!&lt;/p&gt;

&lt;p&gt;Essa transição não apenas simplifica o processo de detecção de alterações, mas também oferece benefícios tangíveis, como a capacidade de atualizar seletivamente partes específicas da aplicação, reduzindo verificações desnecessárias. Além disso, a flexibilidade dos signals, que podem ser empregados em vários contextos, desde componentes até serviços.&lt;/p&gt;

&lt;p&gt;Ao integrar-se com o RxJS, os signals alinham-se perfeitamente às práticas de desenvolvimento existentes, proporcionando uma experiência aprimorada sem impor mudanças significativas na arquitetura.&lt;/p&gt;

&lt;p&gt;Em última análise, os signals não apenas representam uma resposta eficaz às limitações do Zone.js, mas também abrem as portas para uma abordagem mais eficiente e refinada na construção de aplicações Angular, promovendo uma gestão de estado mais inteligente e uma experiência de desenvolvimento mais fluida.&lt;/p&gt;

&lt;h5&gt;
  
  
  Parabéns por chegar até aqui! 🎉
&lt;/h5&gt;

&lt;p&gt;Agradeço por dedicar seu tempo à leitura do artigo sobre signals no Angular e espero que continuemos a trocar conhecimentos valiosos. &lt;strong&gt;No próximo artigo, vamos aprofundar ainda mais nosso conhecimento, explorando diferentes tipos de signals. &lt;a href="https://dev.to/matheusriann/angular-signals-na-pratica-140o"&gt;Acesse aqui o artigo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Com gratidão,&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/matheus-riann/"&gt;Matheus Rian&lt;/a&gt;&lt;br&gt;
☝️ Me siga para receber novos conteúdos e artigos!&lt;/p&gt;

&lt;h5&gt;
  
  
  Referências
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://angular-signals.dev/"&gt;https://angular-signals.dev/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://riegler.fr/blog/2023-11-02-v17-change-detection"&gt;https://riegler.fr/blog/2023-11-02-v17-change-detection&lt;/a&gt;&lt;br&gt;
&lt;a href="https://consolelog.com.br/como-funciona-change-detection-angular/"&gt;https://consolelog.com.br/como-funciona-change-detection-angular/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
