更改控制器中 ng-repeat 中定义的变量的状态
Change state of variable defined in ng-repeat in controller
我想知道是否可以从控制器更改 ng-repeat 中定义的变量的值?
我正在尝试初始化一个简单的变量 "opened",用于在控制器内部的 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
谢谢,
简单的回答是否定的,因为您的控制器无权访问该范围。
您可以从控制器访问的 $scope 对象是您的 "root" 范围。像 ng-repeat 这样的指令创建了它们自己的子作用域,"inherit" 它们的祖先,这意味着它们可以访问它们的变量。父作用域无法访问子作用域。
不过,有一个技巧。
你必须在你的根范围(在你的控制器上)定义你的变量,然后你可以在你的 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 = {}
我就是这样解决的:
在 js 控制器上声明:
$scope.opened = [];
在 html 中的项目上:
ng-click="opened[$index].valor = (rotateImg[$index] = !rotateImg[$index])"
并且在 img class 上:
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);
}
我想知道是否可以从控制器更改 ng-repeat 中定义的变量的值?
我正在尝试初始化一个简单的变量 "opened",用于在控制器内部的 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
谢谢,
简单的回答是否定的,因为您的控制器无权访问该范围。
您可以从控制器访问的 $scope 对象是您的 "root" 范围。像 ng-repeat 这样的指令创建了它们自己的子作用域,"inherit" 它们的祖先,这意味着它们可以访问它们的变量。父作用域无法访问子作用域。
不过,有一个技巧。
你必须在你的根范围(在你的控制器上)定义你的变量,然后你可以在你的 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 = {}
我就是这样解决的:
在 js 控制器上声明:
$scope.opened = [];
在 html 中的项目上:
ng-click="opened[$index].valor = (rotateImg[$index] = !rotateImg[$index])"
并且在 img class 上:
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);
}