добавление и удаление классов в angularJs с помощью ng-click
Я пытаюсь работать, как добавить класс с помощью ngClick. Я загрузил свой код на plunker Нажмите здесь. Глядя на угловую документацию, я не могу понять, как именно это должно быть сделано. Ниже приведен фрагмент моего кода. Может кто-нибудь направить меня в правильном направлении
<div ng-show="isVisible" ng-class="{'selected': $index==selectedIndex}" class="block"></div>
контроллер
var app = angular.module("MyApp", []);
app.controller("subNavController", function ($scope){
$scope.toggle = function (){
$scope.isVisible = ! $scope.isVisible;
};
$scope.isVisible = false;
});
10 ответов:
вам просто нужно привязать переменную в директиву "ng-class" и изменить ее из контроллера. Вот пример того, как это сделать:
var app = angular.module("ap",[]); app.controller("con",function($scope){ $scope.class = "red"; $scope.changeClass = function(){ if ($scope.class === "red") $scope.class = "blue"; else $scope.class = "red"; }; });
.red{ color:red; } .blue{ color:blue; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <body ng-app="ap" ng-controller="con"> <div ng-class="class">{{class}}</div> <button ng-click="changeClass()">Change Class</button> </body>
вот пример работы на jsFiddle
Я хочу добавить или удалить"
active
" класс в моем коде динамически наng-click
, вот что я сделал.<ul ng-init="selectedTab = 'users'"> <li ng-class="{'active':selectedTab === 'users'}" ng-click="selectedTab = 'users'"><a href="#users" >Users</a></li> <li ng-class="{'active':selectedTab === 'items'}" ng-click="selectedTab = 'items'"><a href="#items" >Items</a></li> </ul>
есть простой и чистый способ сделать это с только директив.
<div ng-class="{'class-name': clicked}" ng-click="clicked = !clicked"></div>
У вас это точно так, все, что вам нужно сделать, это установить selectedIndex в вашем ng-click.
ng-click="selectedIndex = 1"
вот как я реализовал набор кнопок, которые изменяют ng-view, и выделяет кнопку текущего выбранного представления.
<div id="sidebar" ng-init="partial = 'main'"> <div class="routeBtn" ng-class="{selected:partial=='main'}" ng-click="router('main')"><span>Main</span></div> <div class="routeBtn" ng-class="{selected:partial=='view1'}" ng-click="router('view1')"><span>Resume</span></div> <div class="routeBtn" ng-class="{selected:partial=='view2'}" ng-click="router('view2')"><span>Code</span></div> <div class="routeBtn" ng-class="{selected:partial=='view3'}" ng-click="router('view3')"><span>Game</span></div> </div>
и это в мой контроллер.
$scope.router = function(endpoint) { $location.path("/" + ($scope.partial = endpoint)); };
вы также можете сделать это в директиву, если вы хотите удалить предыдущий класс и добавить новый класс
.directive('toggleClass', function() { return { restrict: 'A', link: function(scope, element, attrs) { element.bind('click', function() { if(element.attr("class") == "glyphicon glyphicon-pencil") { element.removeClass("glyphicon glyphicon-pencil"); element.addClass(attrs.toggleClass); } else { element.removeClass("glyphicon glyphicon-ok"); element.addClass("glyphicon glyphicon-pencil"); } }); } }; });
и в вашем шаблоне:
<i class="glyphicon glyphicon-pencil" toggle-class="glyphicon glyphicon-ok"></i>
var app = angular.module("MyApp", []); app.controller("subNavController", function ($scope){ $scope.toggle = function (){ $scope.isVisible = ! $scope.isVisible; }; $scope.isVisible = false; });
<div ng-show="isVisible" ng-class="{'active':isVisible}" class="block"></div>
я использовал предложение Зака Аргайла выше, чтобы получить это, которое я нахожу очень элегантным:
CSS:
.active { background-position: 0 -46px !important; }
HTML:
<button ng-click="satisfaction = 'VeryHappy'" ng-class="{active:satisfaction == 'VeryHappy'}"> <img src="images/VeryHappy.png" style="height:24px;" /> </button> <button ng-click="satisfaction = 'Happy'" ng-class="{active:satisfaction == 'Happy'}"> <img src="images/Happy.png" style="height:24px;" /> </button> <button ng-click="satisfaction = 'Indifferent'" ng-class="{active:satisfaction == 'Indifferent'}"> <img src="images/Indifferent.png" style="height:24px;" /> </button> <button ng-click="satisfaction = 'Unhappy'" ng-class="{active:satisfaction == 'Unhappy'}"> <img src="images/Unhappy.png" style="height:24px;" /> </button> <button ng-click="satisfaction = 'VeryUnhappy'" ng-class="{active:satisfaction == 'VeryUnhappy'}"> <img src="images/VeryUnhappy.png" style="height:24px;" /> </button>
Если вы предпочитаете разделение проблем таким образом, что логика добавления и удаления классов происходит на контроллере, вы можете сделать это
контроллер
(function() { angular.module('MyApp', []).controller('MyController', MyController); function MyController() { var vm = this; vm.tab = 0; vm.setTab = function(val) { vm.tab = val; }; vm.toggleClass = function(val) { return val === vm.tab; }; } })();
HTML
<div ng-app="MyApp"> <ul class="" ng-controller="MyController as myCtrl"> <li ng-click="myCtrl.setTab(0)" ng-class="{'highlighted':myCtrl.toggleClass(0)}">One</li> <li ng-click="myCtrl.setTab(1)" ng-class="{'highlighted':myCtrl.toggleClass(1)}">Two</li> <li ng-click="myCtrl.setTab(2)" ng-class="{'highlighted':myCtrl.toggleClass(2)}">Three</li> <li ng-click="myCtrl.setTab(3)" ng-class="{'highlighted':myCtrl.toggleClass(3)}">Four</li> </ul>
CSS
.highlighted { background-color: green; color: white; }
Я не могу поверить, как сложно все это делают. Это на самом деле очень просто. Просто вставьте это в свой html (без директивы./ требуются изменения контроллера - "bg-info" является классом начальной загрузки):
<div class="form-group col-md-12"> <div ng-class="{'bg-info': (!transport_type)}" ng-click="transport_type=false">CARS</div> <div ng-class="{'bg-info': transport_type=='TRAINS'}" ng-click="transport_type='TRAINS'">TRAINS</div> <div ng-class="{'bg-info': transport_type=='PLANES'}" ng-click="transport_type='PLANES'">PLANES</div> </div>
для реактивных формах -
HTML-файла
<div class="col-sm-2"> <button type="button" [class]= "btn_class" id="b1" (click)="changeMe()">{{ btn_label }}</button> </div>
TS file
changeMe() { switch (this.btn_label) { case 'Yes ': this.btn_label = 'Custom' ; this.btn_class = 'btn btn-danger btn-lg btn-block'; break; case 'Custom': this.btn_label = ' No ' ; this.btn_class = 'btn btn-success btn-lg btn-block'; break; case ' No ': this.btn_label = 'Yes '; this.btn_class = 'btn btn-primary btn-lg btn-block'; break; }