Зачем нам нужен 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>