Diretivas Essenciais do AngularJS para Manipulação Dinâmica de DOM

As diretivas são a essência do AngularJS, permitindo estender o vocabulário do HTML para criar aplicações web dinâmicas. Elas funcioanm como marcadores em elementos do DOM que instruem o compilador do framework a anexar comportamentos específicos ou transformar o elemento e seus filhos.

Diretivas de Atributos de Estado

Existem diretivas projetadas para manipular estados booleanos de elementos HTML de forma reativa. Por exemplo, ng-disabled, ng-readonly e ng-checked permitem que o estado de campos de formulário seja controlado diretamente por expressões do escopo.

<div>
 <label>Bloquear edição:</label>
 <input type="checkbox" ng-model="travarCampo">
 <br/>
 <input type="text" ng-readonly="travarCampo" value="Conteúdo do campo">
</div>

Gerenciamento de Links e Imagens

Ao trabalhar com caminhos dinâmicos, é fundamental utilizar ng-href e ng-src em vez dos atributos nativos. Isso evita que o navegador tente carregar um recurso antes que a expressão do AngularJS (ex: {{url}}) tenha sido processada, o que resultaria em erros de requisição (404).

<!-- Forma correta para links dinâmicos -->
<a ng-href="{{linkDinamico}}">Acessar Recurso</a>

Escopo e Hierarquia de Controladores

A diretiva ng-controller cria um novo escopo que herda do escopo pai. Um conceito crítico no AngularJS é o funcionamento da herança prototípica. Quando trabalhamos com valores primitivos (strings, booleans) diretamente no $scope, a alteração em um escopo filho pode não refletir no pai, pois o filho cria uma cópia local.

A melhor prática é sempre utilizar um objeto como "ponte" (o famoso "ponto no modelo") para garantir que a referência seja compartilhada corretamente entre controladores aninhados.

angular.module('appExemplo', [])
 .controller('PaiController', function($scope) {
   // Utilizando objeto para garantir herança por referência
   $scope.modelo = {
     texto: 'Valor inicial'
   };
 })
 .controller('FilhoController', function($scope) {
   $scope.atualizar = function() {
     $scope.modelo.texto = 'Alterado pelo filho';
   };
 });

Renderização de Listas e Condicionais

Para iterar sobre coleções de dados, utilizamos o ng-repeat. Esta diretiva oferece propriedades úteis como $index, $even e $odd, facilitando a aplicação de estilos intercalados.

<ul ng-controller="ListaController">
 <li ng-repeat="item in produtos" ng-class="{cinza: $even, branco: $odd}">
   {{$index + 1}}. {{item.nome}} - {{item.preco | currency}}
 </li>
</ul>

Para controle de visibilidade, o framework oferece ng-if, ng-show e ng-hide. A diferença fundamental é que o ng-if remove ou adiciona o elemento no DOM, enquanto os outros apenas alteram a propriedade CSS display.

Interação e Formulários

O ng-model estabelece uma via de mão dupla (two-way data binding) entre a view e o model. Combinado com ng-change e ng-submit, permite validar e processar dados de forma eficiente.

<form ng-submit="enviarDados()">
 <input type="email" ng-model="usuario.email" required>
 <button type="submit">Cadastrar</button>
</form>

Prevenção de FOUC com ng-cloak

Para evitar que as expressões entre chaves {{ }} apareçam rapidamente na tela antes do Angular processá-las (efeito conhecido como Flash of Unrendered Content), utiliza-se a diretiva ng-cloak em conjunto com regras CSS específicas que ocultam o elemento até que o framework esteja pronto.

Tags: AngularJS javascript frontend directives data-binding

Publicado em 6-21 02:53