É necessário JavaScript invasivo para oferecer suporte a um recurso do AngularJS?

9

Começarei dizendo que estou apenas aprendendo sobre o AngularJS e estava lendo este artigo, que parece defender o JavaScript invasivo como a coisa certa:

http://www.ng-newsletter.com/posts/angular-for-the-jquery-developer.html

Meu entendimento é que o JavaScript discreto é geralmente considerado "a coisa certa" (que talvez seja discutível, mas está fora do escopo da minha pergunta). Mas eu queria saber se existe um recurso específico do AngularJS que requer que as ligações de eventos sejam especificadas por meio de atributos como ng-click? Existe uma maneira de usar AngularJS e NÃO usar ligações de eventos embutidos?

Para referência: JavaScript obstrutivo geralmente se refere a ter seus vínculos JavaScript no próprio HTML. JavaScript discreto refere-se ao uso de JavaScript ou outros meios para aplicar programaticamente comportamentos de código ao DOM, em vez da marcação em texto sem formatação com referências ao JavaScript.

Kevin
fonte
Reescrevi a pergunta para ser menos baseada em opiniões.
Kevin
4
na verdade, isso já é respondida: stackoverflow.com/questions/20906804/...
Kevin

Respostas:

6

Sim.

É assim que o angular funciona.

Antigamente (logo após todos os dinossauros desaparecerem e um pouco antes dos smartwatches se tornarem a próxima grande coisa), o JavaScript discreto era considerado a coisa certa. JavaScript discreto ficava com sua prima, Aperfeiçoamento Progressivo, e os dois eram anunciados como a luz do mundo e o farol da bondade.

Havia uma razão para isso. Muitos usuários estavam usando navegadores com mecanismos JavaScript ruins ou talvez nenhum mecanismo JavaScript. Ou eles tinham o JavaScript desativado. Disseram-nos que a Web era principalmente para transferência de hipertexto e não devemos tornar nossos sites inutilizáveis ​​para alguns, forçando o JavaScript sobre eles.

Da mesma forma, fazia sentido manter o JavaScript fora do HTML. O HTML deve ser mantido puro, pensou-se, porque o JavaScript foi algo que você adicionou posteriormente - se o usuário permitir. Caso contrário, pelo menos a marcação HTML refletia a semântica do que você estava tentando transmitir.

Essa não é a filosofia do AngularJS ou das diretrizes mais modernas de desenvolvimento da Web, porque as coisas mudaram. Quando usamos o AngularJS ou estruturas semelhantes, estamos usando a Web para fornecer aplicativos , não apenas texto e imagens. Os aplicativos da Web são inúteis sem JavaScript, e não faz sentido fingir o contrário. Portanto, eliminamos as amarras do aprimoramento progressivo porque (a) podemos confiar com segurança em todos os nossos usuários com o JavaScript ativado e (b) isso apenas nos atrasa.

Uma vez que não estamos fazendo o aprimoramento progressivo, por que o JavaScript discreto? Separação de preocupações é um conceito maravilhoso. Mas são seis de uma ou meia dúzia da outra: você tem HTML cheio de referências ao JavaScript ou JavaScript cheio de referências ao HTML (a maneira do jQuery).

Se você usa o AngularJS, em breve verá uma separação mais clara de preocupações em seu código do que em outros estilos de desenvolvimento da Web. Claro, existem referências às funções JS no seu HTML. Mas você pode facilmente mover o HTML sem se preocupar com a quebra de código, e seu JS é limpo, testável e não depende de um DOM muito específico. Isso permite reutilizar melhor a lógica comercial e reutilizar melhor o HTML.

Conclusão: não se estresse. Você vai se acostumar com isso rápido o suficiente. E não resista às coisas só porque você sempre disse que o outro caminho é o caminho certo.

Adenda Se você sente que é importante para o seu HTML para ser compatível com o padrão, você pode usar o data-prefixo de suas directivas angulares: ou seja, data-ng-click=e data-ng-repeat=e sua HTML será compatível com W3C. Pessoalmente, nunca me preocupo com isso, mas fazê-lo é inofensivo.

Aaron Greenwald
fonte
3
Boa explicação, mas desconfio de sua afirmação de "não fazer aprimoramento progressivo". O aprimoramento progressivo é muito mais do que voltar ao noJS. Ele fornece imagens de retina e SVGs com fallbacks para aqueles sem dispositivos de retina. Ele está adicionando animações sutis aos navegadores que os suportam. Está reduzindo a qualidade de streaming de vídeo em dispositivos de baixa largura de banda (como o youtube faz). É um design responsivo. Talvez você não precise de fallbacks noJS para seu aplicativo Web, mas não abandone o aprimoramento progressivo.
Bryanbraun 31/07/2015
1
@bryanbraun você está correto. Ponto tomado.
Aaron Greenwald
Como você faz Angular discreto? Estamos prontos para lançar o Angular e encontramos uma falha séria no projeto. Temos uma equipe de design HTML para 50 pessoas e uma equipe de desenvolvimento para duas pessoas. Os designers alteram o HTML sem adicionar não-html. Dois desenvolvedores não podem acompanhar 50 designers se precisássemos ajustar todos os modelos criados todos os dias, mesmo após a publicação dos sites. Também parece bobagem compilar modelos de html inteiros em código JavaScript como o Webpack quando você pode automatizar essa função no servidor para reunir, compactar e armazenar em cache html por escopo de página em um arquivo zip com a mesma eficiência de download do cliente.
Zachary Scott