以下代码无效 -
<div ng-init="selected=-1">
<ul ng-repeat="x in arr">
<li ng-click="selected = $index">...</li>
</ul>
当我点击其中一个li
时,所选的变量仍为-1
。但以下确实有效 -
<div ng-init="selected=-1">
<ul ng-repeat="x in arr">
<li ng-click="setTo($index)">...</li>
</ul>
$scope.setTo = function(index){selected = index;}
为什么?没有任何功能似乎已经改变。
答案 0 :(得分:3)
ng-repeat
指令为arr
中的每个项创建自己的范围,因此当执行表达式selected = $index
时,将在该范围上创建新属性selected
,同时父母范围保持不变。
为什么selected
属性在第一种情况下不会改变。
答案 1 :(得分:3)
自the ngRepeat
directive creates its own scope起,您需要在第一个示例中引用$parent.selected
:
<li ng-click="$parent.selected = $index">