Search code examples
javascriptangularjsangular-ui-bootstrapng-class

Using conditional operator with ng-class - AngularJS


I am new to web development. Recently was trying out an example to implement Tab functionality in Angular JS.

I want to apply conditional operator to the following code. Can I apply condtional operator? cause I dint get it right. Its showing some error.

  <div class="tab-content">
    <div ng-class="{'tab-pane active': activeTab === 1, 'tab-pane' : activeTab !== 1}">Panel 1 Content</div>
    <div ng-class="{'tab-pane active': activeTab === 2, 'tab-pane' : activeTab !== 2}">Panel 2 Content</div>
    <div ng-class="{'tab-pane active': activeTab === 3, 'tab-pane' : activeTab !== 3}">Panel 3 Content</div>
  </div>

Please find the whole code from below:

I am trying to get Tab click Dynamically. So that upon tab clicks corresponding panes are active.

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Bootstrap tab panel with Angular</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" /> 
  </head>
  <body ng-app="app" ng-controller="ctrl">
      <ul class="nav nav-tabs">
        <li ng-class="{'active' : activeTab == 1}"><a href="" ng-click="setActiveTab(1)">One</a></li>
        <li ng-class="{'active' : activeTab == 2}"><a href="" ng-click="setActiveTab(2)">Two</a></li>
        <li ng-class="{'active' : activeTab == 3}"><a href="" ng-click="setActiveTab(3)">Three</a></li>
      </ul>

      <div class="tab-content">
        <div ng-class="{'tab-pane active': activeTab === 1, 'tab-pane' : activeTab !== 1}">Panel 1 Content</div>
        <div ng-class="{'tab-pane active': activeTab === 2, 'tab-pane' : activeTab !== 2}">Panel 2 Content</div>
        <div ng-class="{'tab-pane active': activeTab === 3, 'tab-pane' : activeTab !== 3}">Panel 3 Content</div>
      </div>
      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
      <script>
        angular.module("app", [])
            .controller("ctrl", ['$scope', function($scope) {
                $scope.activeTab = 1;

                $scope.setActiveTab = function(tabToSet) {
                    $scope.activeTab = tabToSet;
                }
            }]);
      </script>
  </body>
</html>

Solution

  • You could minimize it to single expression inside ng-class condition, by adding tab-pane as default class and add active class conditionally when tab is active.

     class="tab-pane" ng-class="{'active': activeTab === 1}