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.
fonte
Respostas:
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=
edata-ng-repeat=
e sua HTML será compatível com W3C. Pessoalmente, nunca me preocupo com isso, mas fazê-lo é inofensivo.fonte