【问题标题】:Apply ng-class only on the element that was clicked on仅在被点击的元素上应用 ng-class
【发布时间】:2015-12-09 12:45:43
【问题描述】:

我只想在被点击的button/element 上应用ng-class,我该怎么做?

JS 文件:

var classApp = angular.module('classApp', []);
classApp.controller('classCtrl', function ($scope) {
    $scope.isActive = false;

    $scope.activeButton = function() { 
       $scope.isActive = !$scope.isActive;         
    }  
});

HTML 文件:

<div ng-app="classApp" ng-controller="classCtrl">
    <button class="button" ng-class="{'active': isActive}" ng-click="activeButton()" type="button">Click Me to Toggle Class</button> 

    <button class="button" ng-class="{'active': isActive}" ng-click="activeButton()" type="button">Click Me to Toggle Class</button> 
</div>

http://codepen.io/anon/pen/BjNyNe

【问题讨论】:

  • 一个简单的解决方案:创建一个数组来保存每个按钮的状态。

标签: javascript angularjs angularjs-ng-click ng-class angular-ng-class


【解决方案1】:

Angular 指令的用途就在这里。 您可以使用一个简单的指令来代替维护各种变量:

app.directive('clickActive', [function() {
    return {
        restrict: 'A',
        link: function(scope, element, attr) {
            element.on('click', function() {
                element.toggleClass("active");
                if (attr.moreClasses) {
                    // Optionally toggle more classes if passed
                    element.toggleClass(attr.moreClasses);
                }
            });
        }
    };
}]);

HTML:

<div ng-app="classApp" ng-controller="classCtrl">
  <button class="button" click-active type="button">Click Me to Toggle Class</button> 

   <button class="button" click-active type="button">Click Me to Toggle Class</button> 
</div>

(可选)传递更多类来切换,例如:

<button class="button" click-active more-classes="foo bar" type="button">Click Me to Toggle Class</button> 

【讨论】:

  • 也许element.toggleClass("active") 更合适?
  • 是的,改变了。谢谢@user3632710
【解决方案2】:

这是一个可能的解决方案:

控制器:

classApp.controller('classCtrl', function ($scope) {
    $scope.isActive = [false, false];

    $scope.activeButton = function (index) {     
        $scope.isActive[index] = !$scope.isActive[index];         
    }   
});

还有html:

<div ng-app="classApp" ng-controller="classCtrl">
    <button class="button" ng-class="{'active': isActive[0]}" ng-click="activeButton(0)" type="button">Click Me to Toggle Class</button> 

    <button class="button" ng-class="{'active': isActive[1]}" ng-click="activeButton(1)" type="button">Click Me to Toggle Class</button> 
</div>

编辑:我的解决方案有效,但 @Shashank Agrawal solution 更好更干净。

【讨论】:

  • 您好 user3632710,感谢您的回答。我更喜欢你的回答,但是我想这样做而不将索引号传递到我的按钮 html 标记中。理想情况下,我希望使用“this”关键字并将其设置为被点击的元素......对不起,我是 AngularJS 的新手。
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 2017-01-20
  • 2020-02-13
相关资源
最近更新 更多