web-dev-qa-db-fra.com

Pourquoi avons-nous besoin de ng-click?

Les applications angulaires utilisent l'attribut ng-click() plutôt que l'événement onclick.

Pourquoi est-ce?

72
BanksySan

ng-click contient une expression angular. Angular sont évaluées dans le contexte d'une Angular portée) , qui est lié à l'élément ayant l'attribut ng-click ou un ancêtre de cet élément.

Le langage d'expression Angular n'inclut pas d'instructions de contrôle de flux et ne peut pas déclarer de variables ou définir des fonctions. Ces limitations signifient que les modèles ne peuvent accéder qu'aux variables et exécuter des fonctions rendues disponibles par un contrôleur ou une directive.

71
groner

Angular ne change pas la signification de l'attribut onclick; il ajoute le parallèle ng-click attribut pour prendre un expression angulaire . onclick prend du vieux code JavaScript, même lorsque vous utilisez Angular.

Pratiquement parlant, supposons que ce que vous faites dans un gestionnaire de clic change certaines variables dans une étendue Angular, ou appelle une fonction dans une étendue Angular qui change certaines variables. Pour ce faire à partir du code JavaScript (comme ce que vous mettriez dans onclick) nécessite un tas d'étapes

  • obtenir une référence à la portée
  • attribuer la variable ou appeler la fonction
  • appel scope.$apply afin que tout ce qui surveille les mises à jour des variables que vous avez modifiées soit notifié

Cela ressemble à ceci:

<a onclick="var $scope = angular.element(event.target).scope(); $scope.yourVar = 42; $scope.$apply()">Go</a>

et avec ng-click et une Angular angulaire pour l'affectation, presque tout cela est implicite:

<a ng-click="yourVar = 42">Go</a>
106
rakslice