AngularJS:ng中的范围更改点击丢失

时间:2014-07-31 21:48:11

标签: angularjs angularjs-scope angularjs-ng-repeat ng-class

我在ngRepeat复制的元素上有ngClick和ngClass:

<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时,来自ngEventDirective的$ scope。$ apply()中的值是正确的;但在某个地方,它迷路了。

fiddle

2 个答案:

答案 0 :(得分:4)

在您的代码中,当您单击按钮

时,将执行所有ng-click

您只需要像下面的示例一样停止事件传播

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


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

答案 1 :(得分:0)

当您点击button时,点击事件会传播到li元素,同时也会执行ng-click

ng-click中,$event变量可用,因此您可以轻松地使用它来停止事件传播:

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