我想知道是否可以从控制器更改ng-repeat中定义的变量的值?
我试图初始化一个简单的变量"打开"用于在控制器内部进行ng-repeat切换。
<div ng-repeat="item in list">
<input type="checkbox" ng-model="active[$index]" ng-click="active[$index]?opened=true:''" />
<a href ng-click="opened=!opened"><span class="glyphicon" ng-class="opened ? 'glyphicon-triangle-bottom' : 'glyphicon-triangle-right'"></span></a>
{{item.title}}
<span ng-show="opened">{{item.title}}</span>
</div>
这是一个展示示例的plunker。 http://plnkr.co/edit/lebA2dokhq2W4AsbjKWB?p=preview
谢谢,
答案 0 :(得分:2)
简单的答案是否定的,因为您的控制器无法访问该范围。
您可以从控制器访问的$ scope对象是您的“根”范围。像ng-repeat这样的指令创建了自己的子范围,它们“继承”了它们的祖先,这意味着它们可以访问它们的变量。父作用域无法访问子作用域。
然而,有一个技巧。
您必须在根范围(在控制器上)定义变量,然后您可以在ng-repeat范围内定义新属性。
像这样:<div ng-repeat="item in list">
<input type="checkbox" ng-model="active[$index]" ng-click="active[$index]?opened=true:''" />
<a href ng-click="option.opened=!option.opened"><span class="glyphicon" ng-class="option.opened ? 'glyphicon-triangle-bottom' : 'glyphicon-triangle-right'"></span></a>
{{item.title}}
<span ng-show="option.opened">{{item.title}}</span>
</div>
在您的控制器中,确保创建此对象:
$scope.options = {}
答案 1 :(得分:1)
我以这种方式解决了我的问题:
在js控制器上声明:
$scope.opened = [];
在html中的项目上放了:
ng-click="opened[$index].valor = (rotateImg[$index] = !rotateImg[$index])"
在img类上:
ng-class="opened[$index].valor ? 'rotate': ''"
CSS就是:
.rotate {
-ms-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}