Зачем нам нужен ng-click?

Angular приложения используют атрибут ng-click(), а не событие onclick.

Почему это?

Ответы

Ответ 1

ng-click содержит выражение angular. Выражения angular оцениваются в контексте angular scope, который связан с элементом, имеющим атрибут ng-click или предком этого элемента.

Язык выражения angular не содержит операторов управления потоками и не может объявлять переменные или определять функции. Эти ограничения означают, что шаблоны могут обращаться только к переменным и запускать функции, предоставляемые контроллером или директивой.

Ответ 2

Angular не изменяет значение атрибута onclick; он добавляет параллельный атрибут ng-click для выражения Angular. onclick использует простой старый код JavaScript, даже если вы используете Angular.

Практически говоря, предположите, что вы делаете в обработчике кликов, меняете некоторые переменные в области Angular или вызываете функцию в области Angular, которая меняет некоторые переменные. Для этого из кода JavaScript (например, то, что вы бы поставили в onclick) требуется куча шагов

  • получить ссылку на область
  • назначить переменную или вызвать функцию
  • вызов scope.$apply, чтобы все уведомления о изменениях, которые вы изменили, получили уведомление

Это выглядит так:

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

и с выражением ng-click и Angular для присваивания, почти все это неявно:

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