Tabla de Contenidos

4.10 ng-class

La directiva ng-class permite de una forma sencilla añadir y quitar clases CSS a un tag.

La forma de hacerlo es mediante un objeto JavaScript que esté en el $scope. En dicho objeto , el nombre de cada propiedad será el nombre de una clase CSS. Si el valor de dicha propiedad es true se añadirá la clase CSS al tag y si está a false se quitará su clase CSS del tag.

Veamos un ejemplo:

Los estilos css serán los siguientes:

    .rojo {
      color:red;
    }
    .subrayado {
      text-decoration: line-through;
    }
    .negrita {
      font-weight: bold;
    }

var app = angular.module("app", []);
   
app.controller("PruebaController", function($scope) {
  $scope.clasesCss={
    rojo:true,
    subrayado:true,
    negrita:false
  }
});

<div ng-class="clasesCss">Este es un texto con clases dinámicas</div>

Ahora al aplicar la directiva ng-class al tag <div> se aplicarán las clases CSS “rojo” y “subrayado”.

Pero ahora todo ésto tiene una ventaja. Al ser valores del $scope los podemos modificar desde AngularJS y automáticamente se modificarán las clases CSS.

Ahora podemos añadir los siguientes tags <input> para modificar desde la propia página las clases CSS que se aplican:

  <input ng-model="clasesCss.rojo" type="checkbox">Aplicar estilo Rojo
  <br>
  <input ng-model="clasesCss.subrayado"  type="checkbox">Aplicar estilo Subrayado
  <br>
  <input ng-model="clasesCss.negrita"  type="checkbox">Aplicar estilo Negrita  
  <br>

Gracias a estos “checkbox” podemos fácilmente modificar qué estilos se aplican a un tag HTML.

AngularJS soporta también que en vez de ser la propiedad del $scope un objeto con las clases sea también un array con el nombre de las clases CSS o un único String con los nombres de las clases separadas por espacios.

Sin embargo, estas 2 formas las veo menos útiles que la que he explicado, pero por supuesto pueden ser mas cómodas de usar según la ocasión.

Ejemplo

El código completo del ejemplo es:

.rojo {
  color: red;
}
.subrayado {
  text-decoration: line-through;
}
.negrita {
  font-weight: bold;
}

<!DOCTYPE html>
<html ng-app="app">
<head>
  <link rel="stylesheet" href="style.css">
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.js"></script>
  <script src="script.js"></script>
</head>
<body ng-controller="PruebaController">

  <input ng-model="clasesCss.rojo" type="checkbox">Aplicar estilo Rojo
  <br>
  <input ng-model="clasesCss.subrayado"  type="checkbox">Aplicar estilo Subrayado
  <br>
  <input ng-model="clasesCss.negrita"  type="checkbox">Aplicar estilo Negrita  
  <br>
  <br>
  <div ng-class="clasesCss">Este es un texto con clases dinámicas</div>

</body>
</html>

var app = angular.module("app", []);
   
app.controller("PruebaController", function($scope) {
  $scope.clasesCss={
    rojo:true,
    subrayado:true,
    negrita:false
  }
});

Referencias