58 votes

AngularJS: Est-ng-cliquez sur "une bonne pratique"? Pourquoi n'est-il pas de ng-{event} dans AngularJS?

J'ai juste commencé à apprendre AngularJS et de la lutte avec quelques notions d'AngularJS. Ce serait génial si quelqu'un pouvait m'expliquer certains points...

  1. Je comprends qu' ng-click est techniquement pas le même que onclick (voir ici), mais les deux sont placés dans le balisage. Je pensais que ce serait une "mauvaise pratique"? Pourquoi est-ce un des concepts de base de AngularJS, si la plupart des gens disent que c'est "mauvais"? J'ai pensé qu'il serait préférable de sélectionner l'élément du DOM de JavaScript et pas à la place de la logique dans le balisage.

  2. Si ng-click est la bonne façon de réagir à des événements de clic dans AngularJS que dois-je faire avec d'autres événements DOM? Je vois qu'il y a plusieurs autres directives comme ng-mouseover, mais pas tous les DOM, les événements ont une AngularJS équivalent. Comment pourrais-je gérer un 'drop' événement dans AngularJS (donc dans le AngularJS way - pas de façon normale)? Pour être clair: je veux faire glisser un fichier dans ma webapp.

Merci beaucoup, Pipo

54voto

Mark Rajcok Points 85912

Pourquoi est-ce un des concepts de base de AngularJS, si la plupart des gens disent que c'est "mauvais"?

Eh bien, les gens qui aiment vraiment JavaScript Discret peut dire qu'il est mauvais. Angularians (et ceux avec un flex de fond) voir la valeur dans le plus approche déclarative.

"Angulaire est construit autour de la conviction que déclarative code est mieux que l'impératif quand il s'agit de la construction de l'Isu et le câblage de composants logiciels... Par déclarative décrivant comment l'INTERFACE utilisateur doit évoluer à mesure que votre demande de modifications de l'état, vous êtes libéré de faible niveau de manipulation du DOM tâches. -- Aperçu doc

Voir aussi Ne pas l'attribut de données options utilisées dans le Bootstrap, Angular.js et Ember.js conflit avec Javascript Discret principes?

que dois-je faire avec d'autres événements DOM?

Écrire vos propres directives pour écouter (ou d'en trouver un qui quelqu'un d'autre a déjà écrit). Angulaire vous donne le pouvoir de prolonger ce que le navigateur peut le faire, par l'écriture de vos propres directives.

Mise à jour: dans les commentaires ci-dessous, Tim Stewart mentionne AngularUI de l' interface utilisateur de l'événement, ce qui vous permet de lier un rappel à tout événement qui n'est pas pris en charge nativement par Angulaire.

5voto

Craig Points 41

Par nature, Angulaire exige des éléments de la majoration pour fonctionner correctement. En outre, ces éléments doivent être "compilé" chaque fois qu'ils changent, pour la plupart. Donc, c'est déjà un peu "encombrant" quel que soit le JavaScript. Vous ne pouvez pas il suffit de remplacer le balisage, et ont tout auto-lié pour vous comme vous le pouvez avec quelque chose comme jQuery.

Strictement parlant, JavaScript discret: 1. sépare de la structure et de comportement, afin de rendre votre code plus propre et le script de l'entretien plus facile 2. devance incompatibilités entre navigateurs 3. fonctionne avec un chiffon propre, sémantique HTML couche (Wikipédia)

Ce n'est pas Angulaire, pour sûr. Afin de réaliser la liaison bidirectionnelle sur tout, ils ont choisi de faire de la coutume de liaison des points dans les DOM, plutôt que d'utiliser un nom de classe ou l'ID de la façon que jQuery ferait. (Un peu de non-approche standard, mais il fonctionne évidemment.)

Mais la véritable façon de penser, il est ceci: Fondamentalement, chaque section contrôlée de votre balise n'est pas vraiment simple HTML plus de toute façon. Il est vraiment plus d'un template, et, comme telle, requiert une interaction avec le moteur qui est en train de préparer pour le rendu. En tant que tel, les règles traditionnelles de la discrétion ne s'applique pas... (FWIW, je suis un grand fan de l'jQuery.sur() pour lier des éléments à des événements automatiquement lorsque l'élément est ajouté à la page. Très propre et flexible, à mon humble avis, et je ne souhaite qu'il y ait un mécanisme similaire dans Angulaire. J'ai comme l'ajout d'une classe d'éléments dans plusieurs endroits sur la page d'invoquer le même gestionnaire d'événements automatiquement. Avoir un seul endroit où aller changer de code est une bonne chose. mais je m'égare...)

Pour moi, le plus gros problème est celui de la conception progressive. La page web de travail sans JavaScript? Personne ne s'en préoccupe vraiment? Hmmm...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X