AngularJS: изменение области действия в ngClick теряется

У меня есть ngClick и ngClass для элемента, дублированного ngRepeat:

<li
    ng-class="{'active': $parent.mem.A == $key, 'not-active': $parent.mem.A && $parent.mem.A != $key}"
    ng-repeat="($key, A) in As"
    ng-click="$parent.mem.A = $key">

Внутри li у меня есть кнопка, которая изменяет значение $parent.mem.A onClick:

<button ng-click="$parent.mem.A = $parent.findInHash('prev','A')">Activate previous</button>

findInHash() возвращает ожидаемое значение, и когда я перехожу через angular, значение в $scope.$apply() из ngEventDirective является правильным; но где-то теряется.

скрипка


person Jakob Jingleheimer    schedule 31.07.2014    source источник


Ответы (2)


в вашем коде все ng-click выполняются при нажатии на кнопку

вам просто нужно остановить распространение события, как в следующем примере

$scope.findInHash = function ($event, dir, attr) {
    $event.stopPropagation();
    $event.preventDefault();
    ...


<button ng-click="$parent.mem.A = $parent.findInHash($event,'prev','A')">...
person Polochon    schedule 31.07.2014
comment
Угу конечно. Ты находка. Спасибо! Я был готов потерять рассудок. - person Jakob Jingleheimer; 01.08.2014

Когда вы нажимаете на button, событие click распространяется на элемент li, и его ng-click также выполняется.

В ng-click доступна переменная $event, так что вы можете легко использовать ее для остановки распространения событий:

<button ng-click="$parent.mem.A = $parent.findInHash('prev','A');$event.stopPropagation();">Activate previous</button>
person kcsoft    schedule 31.07.2014