如何使用ng-click单独切换多个元素上的类?
在这个问题中https://stackoverflow.com/a/22072110/2169327点击切换类是这样的:
CSS:
.red {
color: red;
}
JS:
$scope.toggle = false;
HTML:
<button id="btn" ng-click="toggle = !toggle" ng-class="{'red' : toggle}">Change Class</button>
但是如果我有几个按钮,每个按钮都应该用ng-click切换自己的类呢?
如果我以这种方式设置它:
HTML:
<button id="btn" ng-click="toggle = !toggle" ng-class="{'red' : toggle}">Change Class</button>
<button id="btn2" ng-click="toggle = !toggle" ng-class="{'red' : toggle}">Change Class</button>
如果我按下按钮,两个按钮都会切换。
我知道一个解决方法是为每个按钮定义一个自己的ng-click事件(对于button1为f.ex toggle1,为button2为toggle2) - 但这是最好的方法吗?
答案 0 :(得分:64)
我制定了简单的测试指令:
module.directive('toggleClass', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('click', function() {
element.toggleClass(attrs.toggleClass);
});
}
};
});
所以你可以创建你需要的任何元素切换类
<button id="btn" toggle-class="active">Change Class</button>
<div toggle-class="whatever"></div>
答案 1 :(得分:18)
根据您的要求,您可以使用带有表示切换的数组的ng-repeat
。例如:
您的观点:
<div ng-repeat="toggle in toggles">
<button id="btn" ng-click="toggle.state = !toggle.state" ng-class="{'red' : toggle.state}">Change Class</button>
</div>
在你的控制器内:
$scope.toggles = [{ state: true }, { state: false }, { state: true }];
通过这种方式,您可以通过简单地更新数组或内部数组对象来扩展您的按钮集(如果您需要更多复杂性)。
答案 2 :(得分:1)
内部控制器
$scope.stateToggle=false;
$scope.togglelasses=function(){
$scope.stateToggle= !$scope.stateToggle;
}
在视图中使用ng-class
<button ng-click="togglelasses()" ng-class="stateToggle? 'active ': ' '">
在要激活类的每个元素中添加ng-class